モデル オブジェクトのIlluminate Collectionがあるとします。User
$users = User::all();
ここで、ID によってそのコレクションから 1 人のユーザーを取得したいと考えています。
私がこれを行うことを知っていた唯一の方法(超醜い):
$user_id = 22;
$user = $users->filter(function($user) use ($user_id) {
return $user->id = $user_id;
})->first();
(この質問と回答から取得。)
ただし、これを行うと、$usersコレクションが破棄されて使用できなくなります。たとえば、以前にコレクションに 100 人のユニーク ユーザーがいた場合、22神に見捨てられたという理由で id を持つユーザーのコピーが 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_users = $usersと同一です。$temp_users = &$usersコレクションを複製する方法はないようです。
この Github issueによると、 Collection::filter() は新しいオブジェクト インスタンスを返していました。明らかに、それはもうありません。そして、私も推測しませ$temp_users = $users;ん-それは地獄のように混乱しています.