Laravel设置段塞属性

klsxnrf1  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(152)

我试图自动设置名字和姓氏为slug on store and update.但是我得到错误:一般错误:1364 1364字段"slug"没有默认值。
我在模型里有这个,哪里做错了?

public function setSlugAttribute($value)
    {
        $firstName = $this->attributes['first_name'];
        $lastName = $this->attributes['last_name'];

        $this->attributes['slug'] = Str::slug($firstName . ' ' . $lastName);
    }
yjghlzjz

yjghlzjz1#

是否已将字段slug添加到模型的$fillable数组中?
试着像这个例子一样删除方法参数$value,另外,还有一个更简单的方法来访问属性。

public function setSlugAttribute()
{
    $firstName = $this->first_name;
    $lastName = $this->last_name;

    $this->attributes['slug'] = Str::slug($firstName . ' ' . $lastName);
}
gg0vcinb

gg0vcinb2#

访问器不会在不通过调用的情况下自动运行。
一种选择是覆盖fill()方法来为您分配值:

//override on model
public function fill(array $attributes): Model
{
    $this->attributes['slug'] = Str::slug($this->first_name . ' ' . $this->last_name);
    return parent::fill($attributes);
}

save()方法(不推荐):

public function save(array $options = []): bool
{
    $this->attributes['slug'] = Str::slug($this->first_name . ' ' . $this->last_name);
    return parent::save($options);
}

在控制器中,以如下方式调用示例:

$model = new $model();
$model->fill($request->all());
$model->save();

相关问题