在集合上使用关系

时间:2013-09-05 20:33:56

标签: laravel laravel-4 eloquent

我有一个Collection,它包含根类别和所有后代。在我的Category模型中,我已经确定可以有许多与该类别相关的帖子。我使用以下代码检索类别及其后代:

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

$categoryAndDescendants是一个Collection对象,其中包含Category个模型。是否可以一次检索所有帖子?

我基本上想做类似的事情:

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

将检索该特定集合中所有类别及其后代的所有帖子。

感谢您的帮助,我为可怕的措辞道歉。

1 个答案:

答案 0 :(得分:0)

我认为这是不可能的。

但您可以编写自定义Collection,并实现此功能。像这样:

<?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;
    }
}

然后,您只需将此自定义集合设置为您的类别模型。

class Category extends Eloquent
{

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