SQL return 语法错误或访问冲突:1064 在使用 symfony 迁移期间

SQL return a Syntax error or access violation: 1064 during migration with symfony

我想添加一个触发器,将我的乘车实体的新状态插入到 ride_history 实体中:

DELIMITER //
CREATE TRIGGER after_updating_changes
AFTER UPDATE ON ride 
FOR EACH ROW
BEGIN
    IF OLD.status_id <> NEW.status_id THEN 
        INSERT INTO ride_history(`ride_id`, `status`, `created`) 
        VALUES(NEW.id, NEW.status_id, NOW());
    END IF;
END //
DELIMITER ;

我已经在phpmyadmin上测试过了,执行过程中没有报错,但是当我把它放到我的迁移文件中并尝试迁移数据库时,symfony returns 这个错误:

An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL synt
  ax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER // CREATE TRIGGER after_
  updating_changes AFTER UPDATE ON ride FOR E...' at line 1

所以我对这一切有点迷茫,请帮助我!

DELIMITER 是客户端命令,不是 SQL 语句。因此在使用 as SQL 语句时会导致错误。

将您的触发器文本转换为单语句形式,从而不再需要 DELIMITER 命令:

CREATE TRIGGER after_updating_changes
AFTER UPDATE ON ride 
FOR EACH ROW
    INSERT INTO ride_history(`ride_id`, `status`, `created`) 
    SELECT NEW.id, NEW.status_id, NOW()
    WHERE OLD.status_id <> NEW.status_id;

PS。请注意,如果任何 status_id 值为 NULL,则 none 将保存到历史记录 table 中。因此,如果此列可为空,则必须相应地调整 WHERE 条件。