首页 > 解决方案 > 如何在 laravel 中使用触发器?

问题描述

我的代码,使用 PHP artisan make:迁移 create_trigger 命令

public function up()
{
  DB::unprepared(' 
  CREATE TRIGGER roll_no BEFORE INSERT ON `students` FOR EACH ROW 
  BEGIN 
  SET @roll_num = IFNULL((substring((SELECT student_roll_no FROM students WHERE
    class_code = NEW.class_code ORDER BY created_at DESC LIMIT 1),-2) + 1), `1`),
    NEW.student_roll_no = CONCAT(
    YEAR(CURRENT_DATE),
    NEW.class_code,
    IF (@roll_num < 10, CONCAT(`0`, @roll_num), @roll_num) 
  )
  END;
  ');
}

标签: mysqldatabaselaraveltriggerslaravel-5.7

解决方案


您无需为模型事件创建迁移。Laravel eloquent 有多个事件retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored,你可以很容易地使用它们。

首先,您应该像这样为您的模型创建观察者

php artisan make:observer UserObserver --model=User

在 UserObserver 中,您可以收听您喜欢的任何事件,例如:

class UserObserver
{
    /**
     * Handle the User "created" event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function created(User $user)
    {
        //
    }

    /**
     * Handle the User "updated" event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function updated(User $user)
    {
        //
    }
}

之后,您应该将您的观察者注册为app/providers/AppServiceProvider引导方法中的模型,例如:

public function boot()
{
     User::observe(UserObserver::class);
}

更多细节请访问Laravel 文档


推荐阅读