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
在搜索时与模型的主键有关。所以,祝你好运。