Laravel 5.6不在`created`模型事件中保存字段

时间:2018-06-19 10:02:30

标签: php laravel events orm eloquent

我正在尝试从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表:

enter image description here

2 个答案:

答案 0 :(得分:1)

创建模型后将触发created事件。在这种情况下,您需要最后调用$discountRate->save()才能更新刚创建的模型。

或者,您可以使用creating事件。在这种情况下,您不必最后调用save(),因为该模型尚未保存在数据库中。 creating事件的一个很大区别是,如果您使用默认行为自动递增,则该模型还没有ID。

有关您可以找到here的事件的更多信息。

答案 1 :(得分:0)

您必须在创建前设置stripe_coupon_id。因此,请替换static::creating模型的self::created方法中的boot而不是DiscountRate