2016-06-10 112 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