2017-02-10 7 views
0

私はLazy/Eager LoadingによるLaravelの雄弁を利用していて、面白い問題を抱えています。Laravel eloquent 5.3複数の制限を持つ熱心な/レイジーなロード関連のモデル

説明:

  • アカウントが
  • すべてのグループが

問題それらにアイテムが含まれ、優先度番号で多くのグループ、それぞれを持っています

  • 私は手動で各グループの返された項目の数に上限を設定する必要が

  • ここでの違いは、例えば

したがって、各グループの優先レベルに基づいて制限数の変化、雄弁な「選択」ステートメントは3つのグループをすべて取得しますが、グループ1に返されるアイテムの数はわずか3アイテム、グループ2はわずか8アイテム、グループ3〜17アイテムに制限されます。

私は何をしようとしました:

  • コードコントローラ内のレコード

    return Account::with([ 
    'group_list.item' 
    ])->where('group_id', $my->group_id) 
    ->orderBy('group_priority_num', 'ASC') 
    ->take(3) <----Gets three groups 
    ->get(['group_priority_num','group_title','group_id']); 
    
  • グループモデル

    public function group_list() { 
    
    // Example 
    $this->number = [4 , 7, 15]; 
    
    
    return $this->group()->limit($this->number)->groupBy('user_group_id_fk'); 
    } 
    

を取得しますこれは1レコードしか返さないか、まったく返さないので、私は現在、これに正しくアプローチする方法については混乱しています。誰かが私にこれに関するいくつかのガイダンスを貸してくれる?

ご協力いただきまして、ありがとうございます。 乾杯!

答えて

2

イーガーローディングはWHERE foreign_key_column IN (list of primary model IDs)を用いて第2のクエリーを介して実施されます。このようなクエリでは、結果をさらにフィルタリングできる他の条件がない限り、モデルごとに制限を設定することはできません。

あなたは3つのオプションがあります。

  • は雄弁熱心な負荷のすべてをしようと、あなたのニーズに応じてPHPで結果をフィルタリングします。
  • それぞれの限界と各モデルの関係を別々のクエリが続くだけ主要モデルをフェッチすることで、あなたの自己をロードする熱心を実行します。
  • あなたは、グループごとに返されるべき行をマーク聞かせあなたのグループテーブルにフラグ列を追加します。
+0

また、このタイプの機能を追加するプルリクエストを行う第4のオプションもあります。ただし、開発するには現在余裕があるよりも時間がかかります。あなたが言うことは意味があります。 ありがとうございました! 乾杯! –

関連する問題