Подтвердить что ты не робот

Как обновить коллекцию с помощью Eloquent Laravel

У меня есть отношение от одного до многих между моделями Device и Command (каждый Device имеет много commands). Теперь я хочу обновить коллекцию команд с помощью метода save(). Итак, я использовал следующий код:

$device = Device::find(1);
$commands = $device->commands()->whereStatus("pending")->get();

$commands->status = "sent";
$commands->save();

Но я получил исключение FatalErrorException с сообщением об ошибке Call to undefined method Illuminate\Database\Eloquent\Collection::save().

Другими словами, я ищу эквивалентный запрос MySQL следующего в Eloquent:

UPDATE commands SET status = 'sent' WHERE status = 'pending';

с использованием Laravel 4.2

4b9b3361

Ответ 1

Вы можете попробовать метод update:

$collection = $device->commands()->whereStatus("pending");
$collection->update(array("status" => "sent"));

Ответ 2

Так как $commands представляет собой набор, изменение значения $commands->status не приведет к тому, что вы намереваетесь (установка значения status на "отправлено" для каждого элемента в коллекции).

Вместо этого действовать независимо от каждого элемента в коллекции:

foreach ($commands as $command)
{
    $command->status = 'sent';
    $command->save();
}

Вы также можете обновить элементы в базе данных с помощью Query Builder:

DB::table('your_table')->where('status', 'pending')->update(array('status' => 'pending'));