モデル オブジェクトの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;
ん-それは地獄のように混乱しています.