Php 从Laravel集合获取单个模型
假设您有一组Php 从Laravel集合获取单个模型,php,laravel,illuminate-container,Php,Laravel,Illuminate Container,假设您有一组用户模型对象 $users = User::all(); 现在,您希望通过ID从该集合中获取单个用户 我知道这样做的唯一方法(超级丑): (摘自) 但是,如果执行此操作,$users集合将被销毁且不可用。例如,如果以前集合中有100个唯一的用户,那么现在您将拥有id为22的用户的100个副本,原因是上帝抛弃了他们 如何从集合中按ID获取单个用户,而不破坏集合或在其中循环 我想这会有用的 $user_id = 22; $temp_users = $users; $user = $te
用户
模型对象
$users = User::all();
现在,您希望通过ID从该集合中获取单个用户
我知道这样做的唯一方法(超级丑):
(摘自)
但是,如果执行此操作,$users
集合将被销毁且不可用。例如,如果以前集合中有100个唯一的用户,那么现在您将拥有id为22
的用户的100个副本,原因是上帝抛弃了他们
如何从集合中按ID获取单个用户,而不破坏集合或在其中循环
我想这会有用的
$user_id = 22;
$temp_users = $users;
$user = $temp_users->filter(function($user) use ($user_id) {
return $user->id = $user_id;
})->first();
但是,更令人恼火的是,$users
仍然被过滤器调用破坏-因此显然$temp\u users=$users
与$temp\u users=&$users
或其他东西是相同的。似乎无法复制收藏
根据,Collection::filter()用于返回全新的对象实例。显然,它不再是了。而
$temp_users=$users代码>我猜-这非常令人困惑。集合形式的雄辩响应实际上扩展了一种特殊的集合类型,它位于illighted\Database\elogent\collection
,具有一种熟悉的方法find()
。简单地使用它
$users = User::all();
$jack = $users->find(22);
集合形式的雄辩响应实际上扩展了一种特殊的集合类型,该集合类型位于illighted\Database\elokent\collection
,它有一种熟悉的方法find()
。简单地使用它
$users = User::all();
$jack = $users->find(22);
如果ID不是主键,您可以使用firstWhere(),如下所示:
$user_id = 22;
$userYouNeed = $users->firstWhere('id', $user_id);
如果你有一个更复杂的条件,你可以考虑使用FiST(),并提供一个类似这样的条件的你自己的回调。
$user_id = 22;
$userYouNeed = $users->firs(function ($user) use ($user_id) {
return $user->id === $user_id; // Or a more complex condition
});
如果ID不是主键,您可以使用firstWhere(),如下所示:
$user_id = 22;
$userYouNeed = $users->firstWhere('id', $user_id);
如果你有一个更复杂的条件,你可以考虑使用FiST(),并提供一个类似这样的条件的你自己的回调。
$user_id = 22;
$userYouNeed = $users->firs(function ($user) use ($user_id) {
return $user->id === $user_id; // Or a more complex condition
});
谢谢你,西奥德,但恐怕不行。这将只返回集合中的第23个元素(基本上是数组索引),而不是id为22
的用户。不,它不返回+1,不,它将得到id=22的模型,这是正确的答案。伙计们,源代码中的$key
指的是项数组中的数组键。看一看-您可以清楚地看到,带有$key
的0
的模型具有id
的1
。如果我是从用户id 44开始的,那么$users->find(0)
将返回id为44
的用户,而不是0
。那么您的代码会有其他问题find()
是正确的答案,对我来说非常有效,$key
在搜索时与模型的主键有关。祝你好运,谢谢你,西奥德,但恐怕不行。这将只返回集合中的第23个元素(基本上是数组索引),而不是id为22
的用户。不,它不返回+1,不,它将得到id=22的模型,这是正确的答案。伙计们,源代码中的$key
指的是项数组中的数组键。看一看-您可以清楚地看到,带有$key
的0
的模型具有id
的1
。如果我是从用户id 44开始的,那么$users->find(0)
将返回id为44
的用户,而不是0
。那么您的代码会有其他问题find()
是正确的答案,对我来说非常有效,$key
在搜索时与模型的主键有关。所以,祝你好运。