簡體   English   中英

如何從foreach內部的查詢傳遞數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM