首页 > 解决方案 > 如何在 laravel 8 中自动更新产品状态

问题描述

我想在使用触发功能或使用模型时将产品状态自动更新为“不可用”Qty <= 0并将状态更新为“重新订购级别” 。Qty > 1 && Qty <= 5我该如何解决这个问题?

这是我的产品表。

Schema::create('products', function (Blueprint $table) {
  $table->bigIncrements('ProductID');
  $table->string('Name');
  $table->string('Brand');
  $table->mediumText('image')->nullable();
  $table->string('Description');
  $table->string('Warranty');
  $table->integer('Price');
  $table->integer('Qty');
  $table->string('Status')->nullable()->default("In Stock");
  $table->unsignedBigInteger('AdminID');
  $table->foreign('AdminID')->references('EmpID')->on('users');
  $table->timestamps();
}); 

标签: laraveleloquentlaravel-8

解决方案


您可以将其作为观察者产品类(更多在https://stackoverflow.com/a/58892374/4780438)或简单地将这样的观察动作添加到产品模型类

 protected static function boot()
    {
        parent::boot();
        
        /*
         *
         * retrieved : after a record has been retrieved.
         * creating : before a record has been created.
         * created : after a record has been created.
         * updating : before a record is updated.
         * updated : after a record has been updated.
         * saving : before a record is saved (either created or updated).
         * saved : after a record has been saved (either created or updated).
         * deleting : before a record is deleted or soft-deleted.
         * deleted : after a record has been deleted or soft-deleted.
         * restoring : before a soft-deleted record is going to be restored.
         * restored : after a soft-deleted record has been restored.
         *
         * */
        
        static::saved(function ($model){
            if ($model->Qty <= 0) {
                $model->Status = 'Not Available';
                $model->save();
            }
            
            if ($model->Qty <= 5 && $model->Qty >= 1) {
                $model->Status = 'Reorder level';
                $model->save();
            }
        });
    }

您可以在文档https://laravel.com/docs/8.x/eloquent#observers中阅读更多内容


推荐阅读