2017-06-14 106 views
0

我创建了一个触发器来检查值是否在指定的范围之间。现在我想为它迁移,但我收到以下错误: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编辑器中,它的工作原理没有任何问题。我错过了什么?

回答

0
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"); 

}