【发布时间】:2014-03-23 19:59:57
【问题描述】:
假设您有一个 Illuminate Collection 的 User 模型对象。
$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 或其他东西相同。似乎无法复制集合。
根据this Github issue,Collection::filter() 用于返回全新的对象实例。显然,它不再。我猜$temp_users = $users; 也没有 - 这真是令人困惑。
【问题讨论】:
标签: php laravel illuminate-container