如何在Laravel 4中进行批量更新?

28

这是一个内部应用程序,大规模赋值安全在这种情况下不是问题。

我正在处理非常大(众多)的表单字段,因此大规模赋值用户编辑将是很好的选择。使用“create()”进行大规模赋值似乎运行良好,但使用查找和保存操作则不好使。

这是我所拥有的:

$post_data = Input::all();
$formobj = HugeForm::find($id);
$formobj->save($post_data);

我该怎么做?我不想指定几十个表单输入。

4个回答

50

你应该能够使用 fill(array $attributes) 方法...

$post_data = Input::all();
$formobj = HugeForm::find($id);
$formobj->fill($post_data);
$formobj->save();

它仍然在5.2版本的API文档中(https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_fill)。基本文档中没有涵盖很多内容,也许您可以建议维护者添加这些内容? - Phill Sparks

20

如果是大规模更新,甚至可以写得更短。

$post_data = Input::all();
HugeForm::find($id)->update($post_data);

2
update 方法不会创建新记录,而 save 方法会在不存在时创建新行并更新现有行。 - Wistar

1
为了在Laravel中允许批量赋值,您需要添加以下内容:
protected $guarded = array();

将其添加到您的模型中。基本上,这告诉laravel不保护任何字段,您也可以使用:

protected $fillable = array();

然后设置您想要填写的字段。

希望这能帮到您。


1
这对我很有用,只需一行代码(适用于Laravel 8):
#ModelName::find($id)->update($request->all());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接