2014-01-28 2 views
1

Мне было интересно, возможно ли заказать любую из подмоделей при ленивой нетерпеливой загрузке? На данный момент у меня естьLaravel lazy eager loading ordering

Пункт: findOrFail ($ id) -> load ('разделы', 'level', 'category', 'tags', 'relatedItems');

Я хотел теги на заказ по имени, так что я задавался вопросом, если что-то вроде

Пункт :: findOrFail ($ ID) -> нагрузки (, «тегов«разделов»,«уровень»,«категории» ',' relatedItems ') -> orderBy (' tag.name ');

было бы возможно.

Я вижу другие примеры здесь, используя «с», но я не могу получить эту загрузку с помощью уникальной базовой модели.

Благодаря

+0

... интересный вопрос! –

ответ

2

Вы используете один и тот же синтаксис, что и с нетерпеливыми ограничениями нагрузок,

$item = Item::findOrFail($id); 
$item->load(array('tags' => function($query) { 
    $query->orderBy('tag.name'); 
})); 

В вашем примере вы можете также использовать с() вместо нагрузки(). Последний используется, когда вы хотите загрузить в существующую модель, как в моем примере, хотя я полагаю, что это расщепление волос!

+0

Это не работает для меня. Если я использую «load», то Item не будет найден. Если я использую 'with', то элемент будет найден, но не с любыми тегами. В модели элементов у меня есть 'public function tags() { return $ this-> принадлежит ToMany ('Tag', 'tag_item_map'); } 'И в модели тега у меня есть ' public function category() { { return $ this-> принадлежитToMany ('Item', 'tag_item_map'); } ' – user3245295

+1

Это работает для меня. У вас, вероятно, есть что-то еще. Трудно сказать, не видя моделей. – Dave