Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Elount Laravel更新集合_Laravel_Laravel 4 - Fatal编程技术网

如何使用Elount Laravel更新集合

如何使用Elount Laravel更新集合,laravel,laravel-4,Laravel,Laravel 4,我在设备和命令模型之间有一对多的关系(每个设备都有许多命令)。现在我想使用save()方法更新一组命令。因此,我使用了以下代码: $device = Device::find(1); $commands = $device->commands()->whereStatus("pending")->get(); $commands->status = "sent"; $commands->save(); 但是我得到了一个FatalErrorException异常,

我在
设备
命令
模型之间有一对多的关系(每个
设备
都有许多
命令
)。现在我想使用
save()
方法更新一组命令。因此,我使用了以下代码:

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

$commands->status = "sent";
$commands->save();
但是我得到了一个
FatalErrorException
异常,错误消息是
调用未定义的方法illighte\Database\Eloquent\Collection::save()

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

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

使用Laravel 4.2

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

相反,请独立处理集合中的每个项目:

foreach ($commands as $command)
{
    $command->status = 'sent';
    $command->save();
}
您还可以通过查询生成器更新数据库中的项目:

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

您可以在
\illumb\Database\elounce\Builder
对象上尝试
update
方法:

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

更新后如何获取集合?将该行指定给变量--应该这样做。谢谢,我编辑了您的答案。我必须在更新
status
之前获取数据,因为在更新之后我将得到一个空集合。对此我只有一个注释:变量
$collection
实际上不是集合,而是查询生成器类update()的一个实例方法不属于Collection类。这实际上不应该是一个可接受的答案-根据上面的注释,它“有效”,因为
$Collection
是QueryBuilderOr的实例,或者与
[您的类]合并::其中('id',$Collection->pull('id')->update($data)
。在这个例子中,它将是
Device::where('id',$commands->pull('id'))->update(['status'=>'pending'])
这就是为什么我喜欢条令,而我讨厌雄辩。最好尽量避免循环中的任何数据库交互,以最大限度地减少您的大O数。