備忘録として残します。
前提
例として、
ユーザーモデルからデータを全取得したものをループ処理していく。
$users = App\Models\User::all();
①foreachメソッドでループ処理
foreach ($users as $user) {
echo $user->name . "\n";
}
なんだかんだこればっかり使ってるコードになってる。
https://readouble.com/laravel/8.x/ja/collections.html
コレクションクラスでも配列と同様に扱える。
②Collectionのeachメソッド
$users->each(function ($user) {
echo $user->name . "\n";
});
https://readouble.com/laravel/8.x/ja/collections.html#method-each
Colectionインスタンスを直感的にループできる。
途中で処理を終わらせる場合は、return false
です。breakじゃない。
③Collectionのmapメソッド
$names = $users->map(function ($user) {
return $user->name;
});
foreach ($names as $name) {
echo $name . "\n";
}
https://readouble.com/laravel/8.x/ja/collections.html#method-map
内部処理的で、array_map()
している。
返り値は、Collectionで返してくれる。
チェーンしてメソッドを繋げられるのが楽。map()->filter()等;
④Collectionのfilterメソッド
$activeUsers = $users->filter(function ($user) {
return $user->active;
});
foreach ($activeUsers as $user) {
echo $user->name . "\n";
}
https://readouble.com/laravel/8.x/ja/collections.html#method-filter
内部処理的で、array_filter()
している。
返り値は、Collectionで返してくれる。
チェーンしてメソッドを繋げられるのが楽。filter()->map()等;
⑤Eloquentのcursorメソッド
foreach (App\Models\User::cursor() as $user) {
echo $user->name . "\n";
}
tiknerを使う際に、
get()やall()でcollectionで返そうとすると最後まで処理が完了しないので使う。
1行ずつレコードをフェッチしている。
さいごに
そんなこといっても。$users->toArray()
してからarray_map()
,array_filter()
使ってしまう・・・