我在Eloquent中有一个关于Pages和Articles的多对多关系的模型设置。我的用户可以每页订购这些文章。
所以我的问题是,我可以订购同步关系...
$page->articles()->sync($specificOrderOfArticleIds)
它按照传递的数组的顺序同步关系。
所以当我查询页面时
$page->articles() // in specified order
按照指定的顺序。
也许我错过了一些明显的东西?
答案 0 :(得分:1)
为了做到这一点,您需要在数据透视表中定义订单的某种列。例如," order"可以使用以下命令为数据透视表上的列指定值:
$page->articles()->sync([1 => ["order" => 1], 42 => ["order" => 6]]);
然后在读取时,您可以将一个闭包传递给您的查询,以通过此列指定顺序。
$page = Page::whereId($id)->with(['articles' => function($query) {
$query->orderBy('pivot.order', 'asc');
}])->get();
" pivot"关系查询中使用关键字指向中间表。
但是,您可以使用上面显示的闭合功能按您喜欢的任何顺序排序,而不仅仅是数据透视表。根据您定义订单的方式,您甚至可能不需要新的数据透视表列。