Laravel 将预定义值添加到数据库中的增变器

Laravel Mutator to add predefined values into database

我是 Laravel 的新手,每次用户创建新产品时,我都会尝试将用户的公司 ID 存储在产品 table 的列中。从用户会话中检索到的公司 ID。我正在尝试使用 Laravel 的 Mutator:

public function setFirstNameAttribute($value) {
        $this->attributes['company_id'] = session()->get('company.id');
    }

但每次我创建新产品时,公司 ID 都存储为空。似乎它从未执行过的功能。还有其他资源可以执行这样的操作吗?

我注意到函数名称不正确,因为访问器使用了您希望访问的列的“严格”大小写名称,它可能就像更改一样简单

public function setFirstNameAttribute($value)

public function setCompanyIdAttribute($value)

您必须使用 model events - 这将在保存前创建模型时执行。或者您可以根据您的逻辑使用其他事件 - 请参阅文档。

class YourModel extends Model
{
    /**
     * The "booted" method of the model.
     *
     * @return void
     */
    protected static function booted()
    {
        static::creating(function (YourModel $model) {
            $model->company_id = session()->get('company.id');
        });
    }
}

Mutators 仅在您直接更改 mutating 字段时起作用: $model->first_name = 'new_name'

使用您的代码 - 您将丢失“new_name”。