Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel在大规模任务中安全工作_Php_Laravel_Eloquent_Models_Laravel 5 - Fatal编程技术网

Php laravel在大规模任务中安全工作

Php laravel在大规模任务中安全工作,php,laravel,eloquent,models,laravel-5,Php,Laravel,Eloquent,Models,Laravel 5,我设置了我的laravel模型保护数组属性,现在当然不能设置了 Model::create(['gaurded_field' => 'value']); 但如何安全地插入它,我想到的唯一选择是先创建,然后执行: $model_object = Model::create(['other_attributes' => 'other_values']); $model_object->gaurded_field = 'value'; $model_object->save(

我设置了我的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个查询中设置它们吗?

您可以做的是:

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

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

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

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

请解释为什么您不能执行
Model::create(['field'=>'value'])
模型上设置
$filleble
后?@user2094178如果设置filleble/guarded属性,则无法将它们发送到create方法…因为您首先需要保护它们不被用户输入保存。非常感谢,我按照您在第一部分中的建议做了,很好,我宁愿不去对于第二个建议,只是因为您有时可能会忘记。仅供参考。
Model::fill()
,它不是一个静态函数,只需创建一个模型实例,然后使用它即可。