@Xveeder

Как реализовать автоматическую генерацию slug в модели Eloquent?

Добрый день, друзья.

Вычитал, что создание метода-преобразователя, наподобие:

public static function setSlugAttribute ($value) {
        $this->attributes['slug'] = Str::slug(mb_substr($this->title, 0, 50), '-');
    }


Автоматически запишет сгенерированную строку в нужное поле. В данном случае, я преобразовываю кириллический title в латиницу и передаю её для поля slug. Исходя из документации, данный метод автоматически должен запуститься, сгенерировать slug и загрузить его в таблицу. Но в итоге поле Slug остаётся пустым.

Что не так?

Вот код контроллера и модели:

<?php

    //Контроллер вызывающий метод модели
    public function submitArticle(Request $request) {
         Article::create($request->all());
 
    }

//Сама модель
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class Article extends Model
{
    protected $table = 'posts';
    protected $fillable = ['title', 'slug', 'description', 'post', 'cover_img', 'created_at', '	updated_at'];
    
    public static function setSlugAttribute ($value) {
        $this->attributes['slug'] = Str::slug(mb_substr($this->title, 0, 50), '-');
    }
}
  • Вопрос задан
  • 857 просмотров
Пригласить эксперта
Ответы на вопрос 2
JhaoDa
@JhaoDa
LaravelRUS Team
Почему в мутаторе обращение к $this->title? В документации разве так написано?
Лучше читайте про события моделей и обсерверы.
Ответ написан
@siarheipashkevich
developer
Добрый вечер!
Вы также должны заботиться об уникальности ваших slug ссылок, если вы собираетесь по ним доставать записи из таблиц и лучше бы вы посмотрели в сторону готовых библиотек для этих нужд, например: eloquent-sluggable, laravel-sluggable
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы