2013-09-05 5 views
0

J'ai un Collection qui contient la catégorie racine et tous les descendants. Dans mon modèle Category, j'ai établi qu'il peut y avoir beaucoup de messages en relation avec la catégorie. Je récupère la catégorie et ses descendants avec ce code:Utilisation des relations sur une collection

$category = Category::findOrFail($categoryID); 
$categoryAndDescendants = $category->getDescendantsAndSelf(); 

$categoryAndDescendants est un objet Collection qui détient Category modèles. Est-il possible de récupérer tous les posts en même temps?

Je veux essentiellement faire quelque chose comme:

$posts = $categoryAndDescendants->posts()->orderBy('timestamp', 'DESC'); 

qui récupérerait tous les postes pour toutes les catégories et leurs descendants dans cette collection particulière.

Merci pour l'aide et je m'excuse pour le libellé terrible.

+0

Ne serait-ce pas juste un cas d'utiliser Eloquent pour les obtenir pour vous? Si vous avez les modèles liés, alors il devrait juste être: '$ posts = $ category-> posts();' – msturdy

Répondre

0

Je pense que ce n'est pas possible.

Mais vous pouvez écrire une collection personnalisée et implémente cette fonction. Quelque chose comme ceci:

<?php 
use Illuminate\Support\Collection; 

class CategoryCollection extends Collection 
{ 

    public function posts() 
    { 
     $posts = new Collection(); 

     foreach ($this->items as $category) { 
      foreach ($category->posts() as $post) { 
       $posts->add($post); 
      } 
     } 

     return $posts; 
    } 
} 

Et puis, vous avez juste besoin de définir cette collection personnalisée à votre modèle de catégorie.

class Category extends Eloquent 
{ 

    public function newCollection(array $models = array()) 
    { 
     return new CategoryCollection($models); 
    } 
} 
+0

Merci pour les réponses. – user2537753

Questions connexes