2016-11-26 5 views
0

Postという名前の親テーブルがあり、ブール型の列がis_anonymousとなっています。 PostテーブルはUsersテーブルとの関係を持っています。 is_anonymousfalseに設定されている場合にのみ、この関係をロードします。私はこれを達成する方法はありますか?親テーブルのフィールドが真である場合にのみリレーションをロードする

以下の関係は、すべての投稿のユーザーを示しています。

$institute = Institute::where('inst_id', '=', $institute_id)->with(
     ['posts' => function ($posts) { 
      $posts->with(['user', 'tags']); 
     }] 
    )->orderBy('created_at', 'DESC')->skip($skip)->take(10)->get(); 

答えて

0

私はレイジーローディングを使用してこれを解決しました。私はこれを行うことができる他の方法はないと思う。より良い方法を見つけたら回答を追加してください。

$posts = Institute::where('inst_id', '=', $institute_id)->first()->posts()->with('tags') 
     ->orderBy('created_at', 'DESC')->skip($skip)->take(10)->get(); 

foreach ($posts as $post) { 
    if (!$post['is_anonymous']) { 
     $post->load('user'); 
    } 
} 

あるいは、

パフォーマンス友好的であるために、私は現在10項目のリストを反復処理し、削除するよう、以下のクエリを使用してこれを解決し、キーのユーザを削除していますことは、常に10を作るよりも優れていますクエリ(最悪の場合)

$posts = Institute::where('inst_id', '=', $institute_id)->first()->posts()->with(['user', 'tags']) 
    ->orderBy('created_at', 'DESC')->skip($skip)->take(10)->get(); 

foreach ($posts as $post) { 
    if ($post['is_anonymous']) { 
     unset($post['user']) 
    } 
} 
関連する問題