Как использовать триггеры в Laravel? - PullRequest
0 голосов
/ 06 марта 2019

Мой код с использованием 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;
  ');
}

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Вам не нужно создавать миграцию для модельного события. Laravel eloquent имеет несколько событий, таких как retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored, которые вы можете легко использовать.

Во-первых, вы должны создать Observer для вашей модели, как это

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 .

0 голосов
/ 06 марта 2019

попробуйте это: пожалуйста, проверьте ваш синтаксис 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');

, например, пожалуйста, проверьте эту ссылку:

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

надеюсь, я вам помогу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...