Я пытаюсь сохранить поле из события модели 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:






Событие created запускается после создания вашей модели. В этом случае вам необходимо в конце вызвать $discountRate->save(), чтобы обновить только что созданную модель.
В качестве альтернативы вы можете использовать событие creating. В этом случае вам не нужно в конце концов вызывать save(), потому что модель еще не сохранена в вашей базе данных.
Большая разница в событии creating заключается в том, что у модели еще нет идентификатора, если вы используете автоинкремент, который является поведением по умолчанию.
Более подробную информацию о событиях вы можете найти здесь.
перед созданием необходимо установить stripe_coupon_id. Поэтому замените static::creating вместо self::created в методе boot модели DiscountRate.
Почему перед созданием нужно установить stripe_coupon_id? Это не обязательный атрибут? creating и created происходят в разное время. Я хочу использовать событие created, чтобы мой код запускался только после успешного создания записи, а не пока это creating.
вы пробовали $ DiscountRate-> save () после его установки?