LoginSignup
5
3

Laravelでのループ処理5選

Posted at

備忘録として残します。

前提

例として、
ユーザーモデルからデータを全取得したものをループ処理していく。

$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()使ってしまう・・・

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3