我正在使用laravel 5.3,在我的自定义模型中,我有一些像以下一样的保护字段。
protected $guarded = ['id', 'tnant_id', 'org_id', 'fac_id', 'slug', 'created_at', 'updated_at', 'deleted_at'];
现在当我尝试使用以下内容添加记录时。
CUSTOM::create(['tnant_id'=>123]);
它返回我的错误。
Field 'tnant_id' doesn't have a default value.
在表格中设置字段默认值将不起作用,因为每次我传递值并且它为所有保护字段提供错误。
那么如何在数据库中添加保护字段值?在更新查询中,它允许更新但在创建时它会给出错误。
答案 0 :(得分:1)
你根本做不到。 Model::create(array $attributes = [])
正在使用方法fill(array $attributes = [])
,我们可能会将其过滤掉所有受保护的属性,因此不会分配它们。因此,在创建时tnant_id
将为空。
我想出了两种方法:
<强> A 强>
所以:
$model = new Model;
$model->tnant_id = 123;
$model->save();
<强>乙强> 这可能比创建更新,但是,可能对您有用。
所以: 假设您正在使用迁移,请在迁移文件中使用:
Schema::create(..
$table->integer('trant_id')->nullable();
//OR
$table->integer('trant_id')->default(0);
...);
注意:很难说哪一个更适合你的用例,但我看到你的属性被称为trant_id
,这是我想的某种形式的关系,所以我建议你看看Eloquent's relationship,这可能是一个更好的答案。