我在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()
。
换句话说,我正在寻找Eloquent
中以下的等效MySQL查询:
UPDATE commands SET status = 'sent' WHERE status = 'pending';
使用Laravel 4.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'));