我使用的是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.
在表中设置字段默认值将不起作用,因为每次我传递值时,它都会为所有保护字段提供错误。
那个么,如何在数据库中添加保护字段值呢?在更新查询中,它允许更新,但在创建时会出错。
你根本做不到。Model::create(array $attributes = [])
使用方法fill(array $attributes = [])
,我们可以说,该方法过滤掉所有受保护的属性,因此不会分配它们。所以在创建点tnant_id
将为空。
我想出了两种方法:
A
- 创建一个新的模型实例
- 设置您的属性
- 保存(持久)到dabase
所以:
$model = new Model;
$model->tnant_id = 123;
$model->save();
B这可能是更新而不是创建,但可能对您有用。
- 更改您的DB模式,允许属性为null值或设置默认值
- 使用model::create()创建模型
- 设置属性&更新
因此:假设您正在使用迁移,在迁移文件中使用:
Schema::create(..
$table->integer('trant_id')->nullable();
//OR
$table->integer('trant_id')->default(0);
...);
注意:很难说哪一个更适合你的用例,但我看到你的属性被称为trant_id
,我想这是某种形式的关系,所以我建议你看看Eloquent的关系,这可能是一个更好的答案。