$allItems = Item::with(['categoryItems' => function($q1){
// Note: Categories here is a reference to the table name not the model.
$q1->join('Categories','category_id','=','categories.id')
->orderBy('name','ASC');
}]);
$allItems = $items->get();
foreach ($allItems as $item) {
echo $item->name.':<br>';
foreach($item['categoryItems'] as $cat) {
echo "- {$cat['name']}<br>";
}
echo '<br>';
}
请注意,外部查询也可以使用orderBy,因此您也可以执行以下操作:
$items = Item::with(['categoryItems' => function($q1){
$q1->join('Categories','category_id','=','categories.id')
->orderBy('name','DESC'); // name here is the cat name
}])->orderBy('name','DESC'); // name here is the item name
1条答案
按热度按时间bnlyeluc1#
我尝试了一下,似乎嵌套的急切加载使用
IN
创建了另一个查询。它不是一个连接,因此您不能引用前一个查询。因此name
将引用类别,但它将与透视表1:1匹配,因此这个orderBy将是无用的,因为它将使用IN
之后的categoryItems排序。看起来您需要执行一个连接,以便能够在透视表级别执行orderBy,在透视表级别,类别顺序很重要,但是您category.name在该级别也没有www.example.com可用。
当然,除非你有一个加入。
因此,如果您决定使用联接,它将类似于:
请注意,外部查询也可以使用orderBy,因此您也可以执行以下操作: