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”。
我是 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”。