Laravel, создайте триггер MySQL из Migration

Я создал хранимую процедуру MySQL от миграции, и она работает просто отлично.

DB::unprepared('
CREATE PROCEDURE sp_Create_Default_Task_1(IN _kid_id INT)
BEGIN
INSERT INTO tasks (kid_id, name) VALUES (_kid_id, \'daily\');
END'
);

В дальнейшем я пытался сделать то же самое, чтобы создать триггер MySQL с помощью следующего кода

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTrigger extends Migration {

public function up()
{
DB::unprepared('
CREATE TRIGGER tr_Task_Default AFTER INSERT ON `kids` FOR EACH ROW
INSERT INTO tasks (`kid_id`, `name`) VALUES (NEW.id, \'Default\');
');
}public function down()
{
DB::unprepared('DROP TRIGGER `tr_User_Default_Member_Role`');
}
}

Но он возвращает ошибку после того, как я бегу php artisan migrate

{"error":{"type":
"Symfony\\Component\\Debug\\Exception\\FatalErrorException",
"message":"Class 'CreateTriggers' not found",
"file":"C:\\xampp\\htdocs\\dev03\\vendor\\laravel\\framework
\\src\\Illuminate\\Database\\Migrations\\Migrator.php",
"line":301}}

Вопрос: Что не так?

19

Решение

Возникла проблема с именами классов.

Правильное имя класса может помочь ИЛИ сделать то же, что и я, Скопируйте ваш рабочий код триггера временно в блокнот / текст. Удалите старый файл триггера миграции и создайте новый.

Примечание: кстати, одно и то же решение действительно для Laravel 4.x и Laravel 5.x

В Ларавеле 4

php artisan migrate:make create_trigger

В Ларавеле 5

php artisan make:migration create_trigger

После того, как он был сгенерирован, я копирую и вставляю тот же код триггера из моего блокнота / текста, и он работает просто отлично.

Вот последний рабочий код для создания триггера через миграцию.

это работает как с RAW а также UNPREPARED метод.

<?php

use Illuminate\Database\Migrations\Migration;

class CreateTrigger extends Migration {

public function up()
{
DB::unprepared('
CREATE TRIGGER tr_User_Default_Member_Role AFTER INSERT ON `users` FOR EACH ROW
BEGIN
INSERT INTO role_user (`role_id`, `user_id`, `created_at`, `updated_at`)
VALUES (3, NEW.id, now(), null);
END
');
}

public function down()
{
DB::unprepared('DROP TRIGGER `tr_User_Default_Member_Role`');
}
}

Примечание. Это просто пример, демонстрирующий концепцию

30

Другие решения

Бежать composer dumpautoload в корне (там же, где artisan) должен заставить это работать.

2

В Laravel 5.5 работает только с DB::unprepared() метод.

1
По вопросам рекламы [email protected]