Laravel 通过模型存储数据

Laravel store data thru model

我不知道如何标记标题。任何人有想法都可以提出修改建议。

我的应用程序中有一系列数据库模型。

我目前可以向模型添加一个全局范围,并让模型在我对 key:value 对数据库的查询中自动添加一个 "where" 子句。这很好用。

class Customers extends Model
{
    protected $table = 'customers';

    protected static function boot() {

        parent::boot();

        static::addGlobalScope('companyRecordID', function (Builder $builder) {
            $builder->where('companyRecordID', Auth::guard('user')->user()->companyRecordID);
        });

    }
}

我在尝试确定是否可以这样做时遇到了麻烦;我希望能够在创建数据库记录时自动存储 Auth::guard('user')->user()->companyRecordID 中的 "companyRecordID"。类似于 created_atupdated_at 是自动创建的,不需要来自控制器的代码来定义。

有人可以指导我找到我应该寻找的东西吗?我花了几个小时试图 google 关键字对找到答案但无济于事。

如果您使用模型创建记录,您可以侦听模型的 creating 事件,然后添加您可能需要的任何其他字段。您可以为 Customers:

上的 creating 事件创建监听器
Customers::creating(function ($customer) {
    if (auth('user')->user()) {
        $customer->companyRecordID = auth('user')->user()->companyRecordID;
    }
});

您可以将其放入服务提供商的 boot 方法或模型的 boot 方法中。如果将其放入模型的 boot 方法中,您可能需要调整为使用 static:: 而不是 Customers::.

我相信你得到了答案,但是,

在您的模型上请使用protected $fillable

protected $fillable = ['','',''];
protected $table = 'customers';

另外,您可以使用 Relationships 来优化您的代码。