[英]How to pass an array from a query inside a foreach
我有以下查詢,它將帶來所有Auth用戶朋友:
$usrusrmembs = DB::table('usrusrs')
->where('accepted', 1)
->where('user_id', $u_id)
->orwhere('friend_id', $u_id)
->pluck('friend_id', 'user_id');
接下來是一個foreach,用於循環從上述查詢中接收到的ID,獲取所有ID的信息,然后將結果發送至Blade:
foreach($usrusrmembs as $key => $val){
$rec_users = ($key == $u_id) ? $val : $key;
$f_usrs_psts = DB::table('posts')
->where('posts.user_id', $rec_users)
->get();
}
return view('updates', ['f_posts' => $f_usrs_psts] );
刀片中的輸出僅顯示一個朋友的帖子,而忽略其他朋友的帖子。 我認為帖子查詢中存在問題,該查詢僅將最后處理的ID發送到刀片。 如果這是問題,那么我該如何解決?
這是Laravel真正閃耀的地方。 充分利用這些關系,並在一個渴望加載的查詢中完成所有這些工作。 我不知道您的模型關系是什么,但是像這樣:
$usrusrmembs = \App\UserUserModel::where('accepted', 1)
->where('user_id', $u_id)
->orwhere('friend_id', $u_id)
->with('posts')
->get();
如果您想要更多的控制權,可以將閉包和whereHas
結合使用,但這可以使您更接近。 然后,在您看來,您可以循環查看每個帖子的帖子:
@foreach($usrusrmembs as $usr)
echo $usr-name // etc
@foreach ($usr->posts as $post)
echo $post->whatever
@endforeach
@endforeach
這不會完全滿足您的需求,但是這個主意應該可以幫助您解決問題,並且可以通過刪除控制器中的foreach循環來跳過整個n + 1問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.