Laravelで、Collection内オブジェクトの属性を更新する方法

このようなユーザー情報を格納するデータベーステーブルがあるとする。

CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

Laravelでは、このようなコードで、usersテーブルの項目を全取得できる。

$users = DB::table('users')->select('*')->get();

$usersは、Illuminate\Support\Collectionオブジェクトである。

$usersに含まれる個々のuserの内容を書き換えようとして、このようにしてもうまくいかない。

foreach($users->items() as &$user) {
    $user->name = 'hoge';
}

このようにするか。

foreach($users as $user) {
    $user->name = 'hoge';
    $user->save();
}

または、このようにすることで書き換えることができるのだ。

$users->getCollection()->transform(function ($user) {
    $user->name = 'hoge';
    return $user;
});