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