如何在数据库中添加保护字段的值



我使用的是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

  1. 创建一个新的模型实例
  2. 设置您的属性
  3. 保存(持久)到dabase

所以:

$model = new Model;
$model->tnant_id = 123;
$model->save();

B这可能是更新而不是创建,但可能对您有用。

  1. 更改您的DB模式,允许属性为null值或设置默认值
  2. 使用model::create()创建模型
  3. 设置属性&更新

因此:假设您正在使用迁移,在迁移文件中使用:

Schema::create(..
$table->integer('trant_id')->nullable();
//OR
$table->integer('trant_id')->default(0);
...);

注意:很难说哪一个更适合你的用例,但我看到你的属性被称为trant_id,我想这是某种形式的关系,所以我建议你看看Eloquent的关系,这可能是一个更好的答案。

最新更新