如何在 Laravel 中使用触发器?

HAR*_*HNA 6 mysql database triggers laravel laravel-5.7

我的代码,使用 PHP artisan make:migration 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;
  ');
}
Run Code Online (Sandbox Code Playgroud)

hos*_*nz3 17

您不需要为模型事件创建迁移。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)
    {
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,您应该在app/providers/AppServiceProvider引导方法中注册您的观察者以进行建模,例如:

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

Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请访问Laravel 文档

  • 模型事件很好,但如果记录被另一个应用程序修改,它们将无法工作。 (4认同)
  • 有什么方法可以查看由另一个应用程序(即 API)修改的记录吗? (2认同)

Moh*_*mad 2

试试这个:请检查你的 SQL 语法

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');
Run Code Online (Sandbox Code Playgroud)

例如,请检查此链接:

[https://itsolutionstuff.com/post/how-to-add-mysql-trigger-from-migrations-in-laravel-5example.html] 1

我希望能帮助你