我设置了我的laravel模型保护数组属性,现在我无法设置
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个查询中设置它们吗?
答案 0 :(得分:2)
你能做的是:
$model_object = Model::fill(['other_attributes' => 'other_values']);
$model_object->guarded_field = 'value';
$model_object->save();
修改强>
还有一件事。如果在使用存储/更新时处理代码中的属性,您可以安全地将其添加到可填充属性中(您不需要在保护中使用它。
$input = $request->input();
$input['guarded_field'] = 'value';
$model_object = Model::create($input);
通过这种方式,您可以安全地将此guarded_field
添加到可填写字段,因为在您的代码中,您始终会使用您的值覆盖它。因此,无论用户发送什么,您都将始终设置自己的价值。当然,您需要对更新执行相同操作(或者如果您不想进行任何更改,则只需更新用户值以进行更新)。有时它可能很方便但你需要非常小心这种技术。