【问题标题】:Laravel store data thru modelLaravel 通过模型存储数据
【发布时间】:2019-11-13 04:43:06
【问题描述】:

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

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

我目前可以为模型添加一个全局范围,并让模型自动将我的查询中的“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 是自动创建的,不需要控制器的代码来定义。

谁能指导我找到我应该寻找的东西。我花了几个小时试图用谷歌搜索关键词对来寻找答案,但无济于事。

【问题讨论】:

  • 您想为每个保存的模型添加companyRecordID 属性吗?
  • 我想为从所述模型保存的每条记录添加带有来自 auth 的值的 companyRecordID。

标签: laravel laravel-6


【解决方案1】:

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

Customers::creating(function ($customer) {
    if (auth('user')->user()) {
        $customer->companyRecordID = auth('user')->user()->companyRecordID;
    }
});

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

【讨论】:

  • 我希望能够让它对模型保持唯一性,就像我在每个查询上添加 where 子句一样——该模型从控制器运行。
  • 保留什么独特的模型?这仅适用于 Customer 模型
  • 正确;您提到要添加到服务提供商启动。
  • 或者你的模型的启动方法
  • 不,抱歉,在我的示例中,我正确命名了您的模型,这是错误的...Customers:: 只需将Customer 调整为Customers,您的模型名称...或将其更改为static::
【解决方案2】:

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

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

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

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

【讨论】:

  • 是的;谢谢你提到这一点。我已经进行了几年的开发,并计划返回并确保所有可填充字段以及模型“设置”都已定义和保护以优化我的代码。我只是不想不断地调整模型以及其他一切。我刚刚达到可以开始构建多租户结构的地步,所以我正在寻找如何通过模型以干净的方法实现所述多租户,而不是更新 200 多个控制器。
猜你喜欢
  • 2015-02-03
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2014-08-13
  • 2020-09-10
  • 1970-01-01
  • 2018-03-01
相关资源
最近更新 更多