Я установил атрибут защищенного массива для моделей 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_field
для заполнения полей, потому что в вашем коде вы всегда перезаписываете его своим значением. Поэтому независимо от того, что пользователь отправит, вы всегда будете устанавливать свои собственные значения. Конечно, вам нужно сделать то же самое для обновления (или просто сбросить пользовательское значение для обновления, если вы не хотите вносить какие-либо изменения). Иногда это может быть удобно, но вы должны быть очень осторожны с этой техникой.
Других решений пока нет …