我正在尝试从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
表:
答案 0 :(得分:1)
创建模型后将触发created
事件。在这种情况下,您需要最后调用$discountRate->save()
才能更新刚创建的模型。
或者,您可以使用creating
事件。在这种情况下,您不必最后调用save()
,因为该模型尚未保存在数据库中。
creating
事件的一个很大区别是,如果您使用默认行为自动递增,则该模型还没有ID。
有关您可以找到here的事件的更多信息。
答案 1 :(得分:0)
您必须在创建前设置stripe_coupon_id
。因此,请替换static::creating
模型的self::created
方法中的boot
而不是DiscountRate
。