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

时间:2017-01-30 09:26:19

标签: php laravel-5.3

我正在使用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.

在表格中设置字段默认值将不起作用,因为每次我传递值并且它为所有保护字段提供错误。

那么如何在数据库中添加保护字段值?在更新查询中,它允许更新但在创建时它会给出错误。

1 个答案:

答案 0 :(得分:1)

你根本做不到。 Model::create(array $attributes = [])正在使用方法fill(array $attributes = []),我们可能会将其过滤掉所有受保护的属性,因此不会分配它们。因此,在创建时tnant_id将为空。

我想出了两种方法:

<强> A

  1. 创建新模型实例
  2. 设置您的属性
  3. 保存(坚持)dabase;
  4. 所以:

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

    <强>乙 这可能比创建更新,但是,可能对您有用。

    1. 更改数据库架构以允许属性为空值或设置默认值。
    2. 使用Model :: create()
    3. 创建模型
    4. 设置属性&amp;更新
    5. 所以: 假设您正在使用迁移,请在迁移文件中使用:

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

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