我已经从迁移创建了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'
);
<?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}}
问题:出了什么问题?
解决方法:
类命名存在问题.
正确的类名可以帮助或像我一样,在记事本/文本中临时复制您的工作触发器代码.删除旧的迁移触发器文件并生成新的.
Note: By the way the same solution is valid for Laravel 4.x and Laravel 5.x
在Laravel 4
PHP artisan migrate:make create_trigger
在Laravel 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`');
}
}
Note: This is just example to demonstrate the concept
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。