2013-06-07 1 views
0

Я новичок в Laravel 4 и некоторые понятия, которые он использует, так что легко на меня. Я занимаюсь разработкой веб-магазина, и у меня есть проблема с получением всех статей от всех потомков в моем дереве каталогов.Eloquent (Laravel4) и Nested-sets (Cartalyst) - Как получить все статьи от всех потомков?

Моя структура дерева хранится в таблице каталогов с помощью вложенных наборов (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, я хотел бы показать все статьи в выбранном узле (если есть) и всех потомков выбранного узла дерева, исключая дубликатов и пейджинга.

Я знаю, что я мог бы соединять статьи со всеми узлами в сводной таблице, но есть ли способ сделать это, как описано, используя Eloquent и вложенные наборы из Cartalyst?

Я открыт для альтернативных решений/предложений ...

ответ

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 чат! Если кто-то придумает лучшее решение, дайте мне знать! :)