Doctrine orm 迁移中的触发因素

Doctrine orm 迁移中的触发因素,doctrine-orm,doctrine,doctrine-migrations,Doctrine Orm,Doctrine,Doctrine Migrations,我试图在条令迁移类中创建一个相当复杂的触发器: 第一个冲动是把整个触发器代码放在一个大的blob中并添加它 与: 然而,迁移失败了 SQLSTATE[42601]: Syntax error: 7 ERROR: cannot insert multiple commands into a prepared statement 这甚至可以在理论迁移中管理吗?是否有解决方法/最佳实践可以做到这一点?addSql在条令的AbstractMigration中,需要一个SQL命令或多个SQL命令的数

我试图在条令迁移类中创建一个相当复杂的触发器:

第一个冲动是把整个触发器代码放在一个大的blob中并添加它

与:

然而,迁移失败了

SQLSTATE[42601]: Syntax error: 7 ERROR:  cannot insert multiple commands into a prepared statement

这甚至可以在理论迁移中管理吗?是否有解决方法/最佳实践可以做到这一点?

addSql
在条令的
AbstractMigration
中,需要一个SQL命令或多个SQL命令的数组。您发送的是一个包含多个SQL命令的字符串,这是不允许的。您可以尝试以下方法:

public function up(Schema $schema)
{
    $this->addSql(explode(';',$triggerSqlInABigBlob));
}

这应该将字符串转换为数组,其中每个元素都是一个SQL命令。不过,这些评论可能有问题。

这并不能解决OP的问题。虽然您所说的是正确的,但添加触发器是一条可能包含语句分隔符(“;”)的语句。
split()
结果可能是错误的,但即使正确地拆分它,也不允许条令对包含分隔符的触发器成功执行
CREATE TRIGGER
。@istepaniuk我认为这正好解决了OP的问题,或者至少是第一个问题-错误
无法将多个命令插入到准备好的语句中
,SQL文件包含触发器的事实超出了编写时的时间点(4年前)。如果调用
$this->addSql('select1;select1;')public function up(Schema $schema)
{
    $this->addSql(explode(';',$triggerSqlInABigBlob));
}