I set my laravel models guarded array attribute, now of course I can't set
Model::create(['gaurded_field' => 'value']);
But how can I insert it safely, only option that comes to mind is to create first, then do:
$model_object = Model::create(['other_attributes' => 'other_values']);
$model_object->gaurded_field = 'value';
$model_object->save();
but that just requires 2 database queries, 1 insert 1 update, can I set them in 1 query ?
What you can do is:
$model_object = Model::fill(['other_attributes' => 'other_values']);
$model_object->guarded_field = 'value';
$model_object->save();
EDIT
There is one more thing. If when using store/update you handle attribute in the code, you can safely add it to fillable attributes (you don't need to use it in guarded.
$input = $request->input();
$input['guarded_field'] = 'value';
$model_object = Model::create($input);
This way you can safely add this guarded_field
to fillable fields because in your code you always overwrite it with your value. So no matter what user will send, you will always set your own value. Of course you need to do the same for update (or just unset user value for update if you don't want to make any changes). Sometimes it might be convenient but you need to be very careful with this technique.