Laravel 5.6 не сохраняет поле в событии модели created

Я пытаюсь сохранить поле из события модели created, но по какой-то причине столбец stripe_coupon_id никогда не сохраняется. Событие created действительно запускается, как я тестировал, пробуя внутри него dd, и оно запускает событие, но не сохраняет этот столбец.

class DiscountRate extends Model
{
    public $table = "discount_rates";

    public $primaryKey = "id";

    public $timestamps = true;

    public $fillable = [
        'id',
        'name',
        'rate',
        'active',
        'stripe_coupon_id'
    ];



    public static function boot()
        {
            parent::boot();
            self::created(function ($discountRate) {
                $coupon_id = str_slug($discountRate->name);
                $discountRate->stripe_coupon_id = $coupon_id;
            });

        }
}

В моем контроллере я просто вызываю служебную функцию, которая вызывает функцию создания модели Laravel по умолчанию:

public function store(DiscountRateCreateRequest $request)
    {
        $result = $this->service->create($request->except('_token'));

        if ($result) {
            return redirect(route('discount_rates.edit', ['id' => $result->id]))->with('message', 'Successfully created');
        }

    }

Таблица discount_rates:

Laravel 5.6 не сохраняет поле в событии модели created

вы пробовали $ DiscountRate-> save () после его установки?

JoseSilva 19.06.2018 13:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
1 566
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Событие created запускается после создания вашей модели. В этом случае вам необходимо в конце вызвать $discountRate->save(), чтобы обновить только что созданную модель.

В качестве альтернативы вы можете использовать событие creating. В этом случае вам не нужно в конце концов вызывать save(), потому что модель еще не сохранена в вашей базе данных. Большая разница в событии creating заключается в том, что у модели еще нет идентификатора, если вы используете автоинкремент, который является поведением по умолчанию.

Более подробную информацию о событиях вы можете найти здесь.

перед созданием необходимо установить stripe_coupon_id. Поэтому замените static::creating вместо self::created в методе boot модели DiscountRate.

Почему перед созданием нужно установить stripe_coupon_id? Это не обязательный атрибут? creating и created происходят в разное время. Я хочу использовать событие created, чтобы мой код запускался только после успешного создания записи, а не пока это creating.

user3574492 28.06.2018 10:13

Другие вопросы по теме