如何使用mysql

时间:2016-03-09 14:54:56

标签: php mysql laravel laravel-5

我正在使用Laravel迁移来创建/管理我的所有数据库脚本,并且我有一个用于创建触发器的迁移。

这是

DB::unprepared(
    'create trigger update_points_aft_insert
        after insert on votes
        for each row
        begin
            declare u_id integer;
            if NEW.votable_type = "App\\Comment" then
                set u_id = (select user_id from comments where id = NEW.votable_id);
                update users set points=points+NEW.vote where id = u_id;
            end if;
    end;'
);

问题是当我运行show triggers;时,我得到了:

*************************** 1. row ***************************
         Trigger: update_points_aft_insert
           Event: INSERT
           Table: votes
       Statement: begin
                declare u_id integer;
                if NEW.votable_type = "AppComment" then
                    set u_id = (select user_id from comments where id = NEW.votable_id);
                    update users set points=points+NEW.vote where id = u_id;
                end if;
            end
          Timing: AFTER
         Created: NULL
        sql_mode: NO_ENGINE_SUBSTITUTION
         Definer: root@localhost

character_set_client:utf8 collat​​ion_connection:utf8_unicode_ci   数据库整理:latin1_swedish_ci

正如您所看到的,mysql读取的内容是if NEW.votable_type = "AppComment" then而不是我想要的内容:if NEW.votable_type = "App\Comment" then ... 有谁知道我怎么能告诉mysql读反斜杠?

编辑:有效的是使用三个反斜杠

2 个答案:

答案 0 :(得分:1)

要考虑反斜杠,你应该加倍。因此," App \\\\ Comment"应该给你" App \ Comment"

答案 1 :(得分:0)

if NEW.votable_type = "App\\\Comment" then有效。我相信你需要两个的原因是因为mysql需要一个反斜杠而laravel需要一个。根据mysql documentation \\将打印\。但我想,发生的事情是Laravel逃脱了第一次反斜杠而mysql逃脱了第二次。所以你需要3。