Ответ 1
Вы можете попробовать метод update
:
$collection = $device->commands()->whereStatus("pending");
$collection->update(array("status" => "sent"));
У меня есть отношение от одного до многих между моделями 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
Вы можете попробовать метод update
:
$collection = $device->commands()->whereStatus("pending");
$collection->update(array("status" => "sent"));
Так как $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'));