我Device和Command模型之间有一对多的关系(每个Device都有很多commands).现在我想使用save()方法更新命令集合.所以,我使用了以下代码:
$device = Device::find(1);
$commands = $device->commands()->whereStatus("pending")->get();
$commands->status = "sent";
$commands->save();
Run Code Online (Sandbox Code Playgroud)
但我得到一个FatalErrorException异常,错误信息是Call to undefined method Illuminate\Database\Eloquent\Collection::save().
换句话说,我正在寻找以下的等效MySQL查询Eloquent:
UPDATE commands SET status = 'sent' WHERE status = 'pending';
Run Code Online (Sandbox Code Playgroud)
使用Laravel 4.2
Ben*_*nRH 22
你可以试试这个update方法:
$collection = $device->commands()->whereStatus("pending");
$collection->update(array("status" => "sent"));
Run Code Online (Sandbox Code Playgroud)
由于$commands是一个集合,更改值$commands->status不会产生您想要的效果(status为集合中的每个项目设置"发送" 的值).
相反,独立地对集合中的每个项目执行操作:
foreach ($commands as $command)
{
$command->status = 'sent';
$command->save();
}
Run Code Online (Sandbox Code Playgroud)
您还可以通过查询生成器更新数据库中的项目:
DB::table('your_table')->where('status', 'pending')->update(array('status' => 'pending'));
Run Code Online (Sandbox Code Playgroud)
小智 6
Laravel 7+新功能更新:
$device = Device::find(1);
$commands = $device->commands()->whereStatus("pending")->get();
$commands->toQuery()->update(array("status" => "sent"));
// you can reload fresh data
$commands->fresh();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44415 次 |
| 最近记录: |