假设您有一个IlluminateUser
模型对象集合。
$users = User::all();
现在,您想按 ID 从该集合中获取单个用户。
我知道这样做的唯一方法(超级丑陋):
$user_id = 22;
$user = $users->filter(function($user) use ($user_id) {
return $user->id = $user_id;
})->first();
(取自这个问题和答案。)
但是,如果您这样做,该$users
集合将被破坏且无法使用。例如,如果之前集合中有 100 个唯一用户,那么您现在将拥有 100 个具有 id 的用户副本,22
出于某种上帝遗弃的原因。
如何在不破坏集合或循环遍历集合的情况下从集合中按 ID 获取单个用户?
我以为这会奏效...
$user_id = 22;
$temp_users = $users;
$user = $temp_users->filter(function($user) use ($user_id) {
return $user->id = $user_id;
})->first();
但是,更令人气愤的$users
是,仍然被过滤器调用破坏了——所以显然$temp_users = $users
是相同的$temp_users = &$users
或什么的。似乎没有办法复制一个集合。
根据这个 Github issue, Collection::filter() 用于返回全新的对象实例。显然,它不再。我也没有$temp_users = $users;
猜到——这真是令人困惑。