2016-06-10 141 views
0

我有一个模型设置的页面和文章的多对多关系的雄辩。我的用户有能力每页订购这些文章。laravel最新帖子按类别排序

所以我的问题是,我可以为了与同步的关系......

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

它同步,表明通过了数组的顺序关系。

因此,当我查询页面

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

这是按照指定的顺序。

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

回答

1

为了做到这一点,您需要在数据透视表中定义订单的某种列。例如,在数据透视表的“命令”栏中可以给予使用值:

$page->articles()->sync([1 => ["order" => 1], 42 => ["order" => 6], ...]); 

然后在读,你可以通过一个封闭到您的查询指定的顺序是通过此列。

$page = Page::whereId($id)->with(['articles' => function($query) { 
    $query->orderBy('pivot.order', 'asc'); 
})->get(); 

关系查询中使用“pivot”关键字指向中间表。

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

+0

太棒了!谢谢 – Tom

相关问题