Laravel. Не сохранять пустое значение в БД

Данный материал предоставлен сайтом PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.

Запрещаем сохранение в базе данные пустого значения колонки.
Представим, что перед сохранением данных в БД, вам необходимо запретить сохранение пустого значения колонки.
Давайте разберем пример того, как это можно сделать.

Представим, что у нас новостной портал, где мы публикуем новости.
Таблица содержит колонки id, title, description и fulltext.
Пример миграции:

Заголовок наших новостей (title) не может быть пустым. И его длина не может быть менее 5 символов.
При сохранении в БД значение колонки title не может быть пустым, но если по какой то причине из request нам ничего не пришло, то мы получим ошибку. Представлю пару примеров для решения данной проблемы:
  1. Используем валидатор
    $messages = [
        'title.required' => 'Заголовок не может быть пустым',
        'title.min' => 'Заголовок не может быть пустым',
    ];
    
    $validateRule = [
        'title' => [
            'required',
            'min:1',
        ],
    ];
    $v = Validator::make($requiredValue, $validateRule, $messages);

    Используя валидатор можно проверить полученное из request значение.
    В данном случае поле title должно быть заполнено и должно содержать хотя бы 1 символ.

  2. Запрещаем сохранение модели с пустым значением title.
    Допустим у нас есть модель Post, которая наследует класс Model.
    class Post extends Model
    {
    ...
    }

    Запрещаем сохранять запись в БД, если колонка title пустая. Для этого переопределим статический метод boot и обработаем процесс сохранения записи с помощью модели. Добавьте в вашу модель следующий код:
    protected static function boot()
    {
        parent::boot();
    
        // Запретим сохранение пустого title
        static::saving(function($p) {
            if(empty($p->title)) {
                return false;
            }
            return true;
        });
    }


    Модель должна выглядеть следующим образом:
    class Post extends Model
    {
        protected static function boot()
        {
            parent::boot();
    
            // Запретим сохранение пустого title
            static::saving(function($p) {
                if(empty($p->title)) {
                    return false;
                }
                return true;
            });
        }
    
        // Ваш ранее написанный код
    }

    С помощью данного переопределения функции boot, также можно выполнять проверку на размер записываемого значения колонки.


В помощью данных способов вы можете решить свою проблему.
Если у вас есть свои примеры и вы готовы ими поделиться, то вы можете опубликовать их в комментариях.
Это может помочь другим людям, которые столкнулись с похожей проблемой.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.