Как использовать триггеры в laravel?

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

Добро пожаловать в СО! Пожалуйста, уточните вашу конкретную проблему или добавьте дополнительные детали, чтобы выделить именно то, что вам нужно. В том виде, в котором он сейчас написан, трудно точно сказать, о чем вы спрашиваете. См. страницу Как спросить для уточнения этого вопроса.

A Jar of Clay 06.03.2019 14:19
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
7
1
15 373
3

Ответы 3

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

я надеюсь помочь вам

Вам не нужно создавать миграцию для события модели. 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.

События модели хороши, но они не будут работать, если записи будут изменены другим приложением.

Nicolas 30.04.2020 12:01

Есть ли способ просмотреть записи, измененные другим приложением, т.е. API?

Anisur Rahaman Sakib 13.05.2020 15:30

Для этого типа операций laravel использует некоторую технику, аналогичную триггеру (событию). Если у вас есть несколько событий, используйте Observer, иначе вы можете выбрать это решение.

// inside your model

public function boot()
{
    parent::boot();

    // beforeCreate
    self::creating(function($model) {
        // do something with your $model before saving....

        // return true or the save will cancel....
        return true;
    });


    // afterCreate
    self::created(function($model) {
        // do something with your $model after saving....

        // return true or the save will cancel....
        return true;
    });


}

Другие вопросы по теме