Eloquent(Laravel4)和Nested-sets(Cartalyst) - 如何获取所有后代的所有文章?

时间:2013-06-07 06:33:55

标签: php laravel laravel-4 nested-sets eloquent

我是Laravel 4的新手以及它使用的一些概念,所以对我来说很容易.. 我正在开发一个网上商店,我在目录树中获取所有后代的所有文章时遇到问题。

我的树结构使用嵌套集(Cartalyst)存储在目录表中:

Category 1
--Sub-category 1.1
----Sub-category 1.1.1
----Sub-category 1.1.2
--Sub-category 1.2
Category 2...

然后我有一个文章表和一个数据透视表article_catalogue。 因此,我使用数据透视表将子类别1.1.1与2篇文章和子类别1.1.2配对,共3篇文章。现在在我的模型中我定义了很多关系,所以我可以使用Eloquent ORM。

现在出现了我的问题,当用户点击子类别1.1或甚至类别1时,我想显示所选节点中的所有文章(如果有的话)以及所选树节点的所有后代(不包括重复项)并有分页。

我知道我可以将文章与数据透视表中的所有节点配对,但有没有办法按照使用Cartalyst的Eloquent和嵌套集进行描述?

我愿意接受其他解决方案/建议......

1 个答案:

答案 0 :(得分:0)

我最终使用了查询构建器,它可以使用:

$articles = DB::table('articles')
->join('article_catalog', 'article_catalog.article_id', '=', 'articles.id')
->join('catalogs', 'catalogs.id', '=', 'article_catalog.catalog_id')
->whereBetween('catalogs.lft', array($activeItem->lft, $activeItem->rgt))
->select('articles.*')->paginate(9);

感谢crynobone在Laravel IRC聊天室提供的所有帮助! 如果有人提出更好的解决方案,请告诉我!:)