laravel最新的帖子按类别排序

时间:2016-06-10 14:31:50

标签: php laravel

我在Eloquent中有一个关于Pages和Articles的多对多关系的模型设置。我的用户可以每页订购这些文章。

所以我的问题是,我可以订购同步关系...

 $page->articles()->sync($specificOrderOfArticleIds)

它按照传递的数组的顺序同步关系。

所以当我查询页面时

  $page->articles() // in specified order

按照指定的顺序。

也许我错过了一些明显的东西?

1 个答案:

答案 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"关系查询中使用关键字指向中间表。

但是,您可以使用上面显示的闭合功能按您喜欢的任何顺序排序,而不仅仅是数据透视表。根据您定义订单的方式,您甚至可能不需要新的数据透视表列。