2016-09-21 26 views
0

我有兩種模式:item和faq。在一個belongsToMany中,相互之間有一個正確創建的連接表:item_faq(單數)。我的連接表上有一個額外的字段用於訂購。Laravel 5.0如何用()查詢命令進行口頭說明

在我看來,我得到所有的常見問題解答,如果他們有一個數據透視表記錄我輸出「檢查」複選框。我也在複選框列表上拖放了訂單,效果很好。

一些代碼註釋:

// ITEMS MODEL 
public function faqs(){ 
     return $this->belongsToMany('App\Faq'); 
    } 

// FAQ MODEL 
public function items(){ 
    return $this->belongsToMany('App\Item'); 
} 

public function hasItem($item) { 
    $items = $this->items->lists('id'); 
    return in_array($item, $items); 
} 

架構的連接表:

  • ITEM_ID
  • faq_id
  • 爲了
  • 時間戳

我的問題是他們的常見問題解答不會按照數據透視表上的順序列排序。

我用一個很簡單的:

$faqs = \App\Faq::with('items')->get(); 

要檢索的常見問題和這個工作在讓所有的常見問題,如果他們是相關的,它會檢查複選框。

如何通過連接表上的訂單欄來排序?

回答

0

看看Eager Load Constraints和我認爲它會幫助提供一個解決方案。從文檔:

當然,渴望加載閉包不限於「約束」。您也可以申請訂單:

$users = User::with(['posts' => function($query) { 

    $query->orderBy('created_at', 'desc'); 

}])->get(); 
+0

我已經試過了,但項目的順序不會改變。如果orderBy字段沒有找到,訂單是否會恢復到某種默認值?我應該參考item_faq.order還是隻訂購? –

+0

看看你提供的'FAQ模型',我看不到'items'關係的定義。它在那裏,只是沒有提供上面?至於默認行爲,我相信它通過'id'排序。我不懷疑添加'item_faq.order'會因爲封閉與'items'連接有關而改變。 – camelCase

+0

我的歉意我錯誤地標記了一些代碼。項目關係在上面(現在)定義。基本上orderBy似乎沒有影響我不明白的順序。 –