2016-11-26 60 views
0

我有一個名爲Post的父表,它有一個名爲is_anonymous的布爾列。 Post表與Users表有關係。我只想在is_anonymous設置爲false時才加載此關係。有沒有辦法實現這一目標?僅當父表中的字段爲真時加載關係

以下關係爲用戶提供了所有帖子。

$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']) 
    } 
} 
相關問題