mysql - laravel通过迁移创建触发器会引发错误或访问冲突

标签 mysql syntax-error laravel-5.4 laravel-migrations

我创建了一个触发器来检查该值是否在指定范围内。现在,我想为其进行迁移,但收到以下错误:

[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/

相关文章:

Java 小程序 + MySQL

ruby - 语法错误,意外的keyword_end需要 '}' SHOES

mysql - 是否可以在 Laravel 中的 String/varchar 类型列上的两个表之间创建外键关系?

php - 拉维尔 5.4 : Directly Subtract number from column in database

php - Laravel 应用程序共享托管,存储文件夹符号链接(symbolic link)问题

MySQL:日志汇总查询

mysql - 单消费者-多线程 vs 多消费者

mysql - 喜欢的帖子设计细节

java - 我的 GUI 中使用 ActionListener 时出现错误

c++ - 如何解决错误? main.cpp | 21 |错误: invalid types 'float [3] Line 21