laravel 安全地处理批量作业

laravel work safely with mass assignments

我设置了我的 laravel models guarded array 属性,当然现在我不能设置

Model::create(['gaurded_field' => 'value']);

但是我怎样才能安全地插入它,想到的唯一选择是先创建,然后再做:

$model_object = Model::create(['other_attributes' => 'other_values']);
$model_object->gaurded_field = 'value';
$model_object->save();

但这只需要 2 个数据库查询,1 个插入 1 个更新,我可以在 1 个查询中设置它们吗?

您可以做的是:

$model_object = Model::fill(['other_attributes' => 'other_values']);    
$model_object->guarded_field = 'value'; 
$model_object->save();

编辑

还有一件事。如果在使用 store/update 时你在代码中处理属性,你可以安全地将它添加到可填充属性中(你不需要在 guarded.

中使用它
$input = $request->input();
$input['guarded_field'] = 'value';
$model_object = Model::create($input);

这样您就可以安全地将此 guarded_field 添加到可填写字段,因为在您的代码中您总是用您的值覆盖它。所以无论用户发送什么,你总是会设置你自己的值。当然,您需要对更新执行相同的操作(或者如果您不想进行任何更改,则只需取消设置更新的用户值)。有时它可能很方便,但您需要非常小心地使用此技术。