我有一个运行Laravel 5.3的应用程序。
我需要对表中的所有记录进行修改,这是我的代码:
Car::all()->each(function($car){
$car->created_by = 10;
$car->updated_by = 15;
$car->save();
});
问题是created_by字段正在保存,但updated_by没有。即使我先前dump($car)
到save()行,我也可以看到两个字段都已被修改。我还将这两个字段添加到$fillable
(我知道,这是用于批量分配,但以防万一..)。
答案 0 :(得分:6)
您可以在一个查询中进行批量更新,而不是检索所有汽车并循环它们并进行数千次查询:
Car::where('id', '!=', null)->update(['created_by' => 10, 'updated_by' => 15]);
这很简单,干净,效率更高。
如果您需要更多信息,请仔细阅读Laravel doc,特别是mass assignment。
希望它有所帮助。
<强>更新强>
我看到模型无法静态调用更新方法,因此有点黑客说:
created_by
PS:请注意,您的
updated_by
或Integrity constraint violation
字段不得唯一,否则 会因查询而产生一些{{1}}错误。当然,没有人大规模更新一个独特的领域。
答案 1 :(得分:0)
我找到了解决方案。我的模型正在使用一个特性,每次更新模型时,它都会保存在updated_by字段中进行更新的人员,因此我从控制台通过命令执行我发布的第一个代码,特性是保存更新操作并且是没有用户被记录auth() - &gt; user()返回null,这就是保存的内容。希望我能说清楚。