I have created MySQL stored procedure from migration and it works just fine.
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'
);
Hereafter I tried to do the same to create MySQL trigger with following code
<?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`');
}
}
But it returns error after I run 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}}
Question: What is going wrong?
There was issue with class naming.
Correct class name could help OR do as I did, Copy your working trigger code temporary in notepad/text. Delete the old migration trigger file and generate new one.
In Laravel 4
In Laravel 5
After it was generated I copy and paste the same Trigger code from my notepad/text and it works just fine.
Here is the final working code for creating trigger through migration.
it works both with
RAW
andUNPREPARED
method.Run
composer dumpautoload
in the root (the same place asartisan
) should make it work.In Laravel 5.5 works only with
DB::unprepared()
method.