我创建了一个触发器来检查该值是否在指定范围内。现在,我想为其进行迁移,但收到以下错误:
[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");
}
关于mysql - laravel通过迁移创建触发器会引发错误或访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550518/