laravel使用迁移创建触发器抛出错误或访问冲突
问题描述:
我创建了一个触发器来检查值是否在指定的范围之间。现在我想为它迁移,但我收到以下错误:laravel使用迁移创建触发器抛出错误或访问冲突
[PDOException] SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter | DROP TRIGGER IF EXISTS header_range_limit | ' at line 1
我的移民看起来像
class HeaderRangeTrigger extends Migration
{
/**
* Create trigger. Checks if a value is > 100 or < 0, sets to 50 is so
*
* @return void
*/
public function up()
{
DB::unprepared('
delimiter |
DROP TRIGGER IF EXISTS header_range_limit |
CREATE TRIGGER header_range_limit BEFORE
UPDATE
ON
user_settings FOR EACH ROW BEGIN IF NEW.header_position < 0 OR NEW.header_position > 100 THEN
SET NEW.header_position = 50;
END IF;
END |
delimiter ;
');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::unprepared('DROP TRIGGER IF EXISTS header_range_limit');
}
}
我也尝试过不同的分隔符,但具有相同的结果。
如果我复制&将代码粘贴到phpmyadmin SQL编辑器中,它的工作原理没有任何问题。我错过了什么?
答
public function up()
{
$procedure ="DROP PROCEDURE IF EXISTS GetInstagramPerContest;
CREATE PROCEDURE GetInstagramPerContest(IN p_contest_id INT(11))
BEGIN
select sum(tt.instatagspercontest) from (
select latest_tags_count as instatagspercontest from ENInstagramTagsCount where contest_id= p_contest_id
UNION
select latest_tags_count as tweetspercontest from CHZHInstagramTagsCount where contest_id= p_contest_id
UNION
select latest_tags_count as tweetspercontest from JPInstagramTagsCount where contest_id= p_contest_id
UNION
select latest_tags_count as tweetspercontest from KRInstagramTagsCount where contest_id= p_contest_id) as tt;
END
";
DB::connection()->getPdo()->exec($procedure);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::unprepared("DROP PROCEDURE IF EXISTS GetInstagramPerContest");
}