Php 如何从foreach中的查询传递数组
我有以下查询,将带来所有Auth用户朋友:Php 如何从foreach中的查询传递数组,php,laravel,Php,Laravel,我有以下查询,将带来所有Auth用户朋友: $usrusrmembs = DB::table('usrusrs') ->where('accepted', 1) ->where('user_id', $u_id) ->orwhere('friend_id', $u_id) ->
$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的POST,然后将结果发送到刀片服务器:
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] );
刀片中的输出仅显示一个朋友的帖子,而忽略其他朋友的帖子。我觉得posts查询中存在一个问题,它只向刀片服务器发送最后处理的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问题。这就是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问题。一般来说,您希望避免在循环中执行查询。例如,如果
$usrusrmembs
包含1000个值,则对数据库进行1000次调用。我将修改您的初始查询,以便在一次调用中获得您需要的所有结果。另外,您在哪里定义了$f_usrs\psts
?您只得到一个结果,因为您覆盖了foreach循环中的$f_usrs\psts
变量。一般来说,您希望避免在循环中执行查询。例如,如果$usrusrmembs
包含1000个值,则对数据库进行1000次调用。我将修改您的初始查询,以便在一次调用中获得您需要的所有结果。另外,您在哪里定义了$f_usrs\psts
?您只得到一个结果,因为您覆盖了foreach循环中的$f_usrs\psts
变量。非常感谢您的澄清。我正在尝试执行此解决方案,但收到了(对未定义方法illumb\Database\Query\Builder::posts()的调用)。我在POST和usrusr模型之间没有关系,因为usrusr是友谊表。不过,用户表与这两个表都相关。听起来您可能希望重新思考一下您的体系结构。我可能建议您将usrusr模型作为用户模型的扩展,然后发布文章。或者,如果usrusr与User是同一个表,只需在usrusr上添加posts
作为关系即可。不管是哪种方式,我认为拥有这种关系会让你的生活变得更容易——你可以用你的观点来看待这种关系,就像我的回答:)非常感谢你的澄清。我正在尝试执行此解决方案,但收到了(对未定义方法illumb\Database\Query\Builder::posts()的调用)。我在POST和usrusr模型之间没有关系,因为usrusr是友谊表。不过,用户表与这两个表都相关。听起来您可能希望重新思考一下您的体系结构。我可能建议您将usrusr模型作为用户模型的扩展,然后发布文章。或者,如果usrusr与User是同一个表,只需在usrusr上添加posts
作为关系即可。不管是哪种方式,我认为拥有这种关系会让你的生活变得更容易——你可以用你的观点来看待这种关系,就像我的回答:)