@truevolkolak

Laravel 5.8. Почему не работает мутатор?

Здравствуйте!
Есть таблица БД с полем "slug". В миграции:
$table->string('slug');

Так как поле должно быть уникальным и генерироваться автоматически при добавлении новой записи, в модели использую мутатор:
public function setSlugAttribute($value) {
        $this->attributes['slug'] = Str::slug(mb_substr($this->manufacture, 0, 60) . "-", "-");
    }

Метод store в соответствующем контроллере:
public function store(Request $request)
    {
        $manufacture = Manufacture::create($request->all());
        
        return redirect()->route('admin.manufactures.index');
    }

При отправке формы поле 'slug' отправляется пустым и по идее должно до сохранения новой записи быть изменено этим мутатором. Но этого не происходит. Появляется в браузере такая ошибка:
SQLSTATE[HY000]: General error: 1364 Field 'slug' doesn't have a default value 
(SQL: insert into `manufactures` 
(`manufacture`, `description`, `meta_description`, `meta_keywords`, `country`) 
values 
(Производитель 2, описание, meta description, meta keywords, Россия))

Причем, как видно из ошибки, при массовом заполнении даже нет попытки сохранить значение поля 'slug', хотя в модели оно объявлено в массиве $fillable:
protected $fillable = [
        'manufacture',
        'slug',
        'country',
        'image',
        'description',
        'meta_description',
        'meta_keywords',
    ];


P.S. В другом проекте на Laravel 5.7 ровно такой же мутатор отлично работает.
  • Вопрос задан
  • 384 просмотра
Решения вопроса 1
JhaoDa
@JhaoDa
LaravelRUS Team
А почему он должен работать? Мутатор мутирует значение, когда оно устанавливается, явно или неявно.

даже нет попытки сохранить значение поля 'slug', хотя в модели оно объявлено в массиве $fillable
Рекомендую почитать в документации для чего придумано это поле. Уж точно не для извлечения данных из реквеста...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы