2017-05-18 8 views
2

を入れ子になりました。雄弁は、私は、オブジェクトが<strong>カテゴリ</strong>と<strong>サブカテゴリ</strong>を持って<strong>写真<strong>オブジェクト</strong>の</strong>を、アップロード<strong>ユーザー</strong>を持っている特定のオブジェクトを撮影することを目標に、オンラインの競争のためにWHERE文の

ユーザーのダッシュボードには、次のようになります。適切なループ内の画像を出力することができるようにするために

------------------------------------------------ 
    |    Category      | 
    ------------------------------------------------ 
    | ----------------------------------------- | 
    | | Subcat.   | Subcat.   | | 
    | |------------------|--------------------| | 
    | |Object1 | Object2 | Object1 | Object2 | | 
    | |------------------|--------------------| | 
    | | Pic1 | Pic1 | Pic1 | Pic1  | | 
    | | Pic2 | Pic2 | Pic2 | Pic2  | | 
    | ---------------------------------------- | 
    |            | 
    ------------------------------------------------ 

は、私はモデル間hasManyの関係をインストールしました。

私は特定のユーザーからの画像をたいコースのダッシュボードの場合:写真モデルはのuser_idフィールドが含まれているので、私は

$userPics = Category::with(['subcats','subcats.objects','subcats.objects.pics'])->get(); 

QUESTIONで便利な階層構造を持つオブジェクトを取得することができます。 Pictures::where('user_id',$user->id)->get();を、その後私は、上記の目的のビューを作成するには、オブジェクト内の構造を持っていない:私は直接、ユーザーの画像を得ることができます。任意のヒントについて

$userPics = Category::with([...])->where('user_id',$user->id)->get(); 

感謝:

は、どのように私はこのような何かを行うことができます!

答えて

1

あなたはこの(少し冗長)を行うので、指定したユーザーに属している写真でカテゴリを取得したい:

Category::with(['subcats', 'subcats.objects' => function ($q) use ($user) { 
     $q->with(['pictures' => function ($q) use ($user) { 
      $q->where('user_id', $user->id); 
     }]); 
    }]) 
    ->whereHas('subcats', function ($q) use ($user) { 
     $q->whereHas('objects', function ($q) use ($user) { 
      $q->whereHas('pictures', function ($q) use ($user) { 
       $q->where('user_id', $user->id); 
      }); 
     }); 
    }) 
    ->get(); 

をあなたが二つ以上を読み込むことができるので、ここでは、ネストされたwith()クロージャを使用する必要がありますドット表記を使用することとの関係のレベル。

あなたは絵とサブカテゴリのデータをロードする必要がない場合は、単にwith()部分を削除します。

また、サブカテゴリをフィルタリングする場合は、with()subcatsのクロージャを追加します。

+0

うわー、驚くほど速いの答え!はい、これは実際にユーザーの写真のみをフィルタリングします。 しかし、カテゴリ/サブカテゴリを/すべてのオブジェクトは、出力に残っています。私は、ユーザーが写真を持っているものだけを持っていたいと思います。どのように私はそれを達成するだろうか? –

+0

@MichielvanNesselrooij更新、見てください。あなたは写真とサブカテゴリのデータをロードする必要がない場合は、単に() ''の部分で削除して、指定したユーザーの写真を持っているカテゴリのみを取得します。 –

+1

素晴らしい。実際、私は 'whereHas'を除いたクエリの出力も必要とするので、答えは二重の目的になります。私はあなたに答えを与えました。ありがとうございました。 –