2016-09-21 10 views
0

私は2つのモデルを持っています:itemとfaq。正しく作成されたjoinテーブル:item_faq(両方の単数)を持つ、belongsToMany内にあります。私の結合テーブルには注文のための追加フィールドがあります。Laravel 5.0()クエリで雄弁を発注する方法

私の意見では、すべてのFAQを取得し、ピボットテーブルレコードを持っている場合、チェックボックスに「checked」を出力します。私はまた、チェックボックスのリストでドラッグ&ドロップの順序をして、それはうまく動作します。

いくつかのコード・ノート:

// 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); 
} 

スキーマのテーブルに参加:

  • faq_id
  • ため
  • をITEM_ID

    • は、タイムスタンプ

    私の問題は、faqがピボットテーブルの注文列でソートされて読み込まれないということです。

    、私は非常に単純なを使用しています:よくある質問を取得するには

    $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は私が理解していない順序には影響していないようです。 –