如何使用Eloquent Laravel更新集合

时间:2014-08-31 23:42:15

标签: laravel laravel-4

我在DeviceCommand模型之间存在一对多的关系(每个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()

换句话说,我正在寻找Eloquent中以下的等效MySQL查询:

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

使用Laravel 4.2

2 个答案:

答案 0 :(得分:22)

您可以尝试update方法:

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

答案 1 :(得分:7)

由于$commands是一个集合,因此更改$commands->status的值不会产生您想要的效果(将status的值设置为'已发送'以用于集合中的每个项目)。

相反,独立地对集合中的每个项目采取行动:

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

您还可以通过查询生成器更新数据库中的项目:

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