Doctrine orm 迁移中的触发因素
我试图在条令迁移类中创建一个相当复杂的触发器: 第一个冲动是把整个触发器代码放在一个大的blob中并添加它 与: 然而,迁移失败了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命令的数
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));
}