Symfony Doctrine Migration $ connection没有权限

时间:2017-02-10 22:23:09

标签: php mysql symfony doctrine-orm migration

我需要在架构迁移的同时进行数据迁移。我使用preUp()postUp()函数来获取数据,应用模式迁移,然后使用一些旧数据更新新列。

由于我要触摸至少6000条记录,我想使用原始查询。我没有ContainerAwareInterface的任何依赖。在我的本地副本上,我做了类似的事情:

$SQL = "SELECT column FROM table;";
$statement = $this->connection->prepare($SQL);
$statement->execute();
$results = $statement->fetchAll(); 
//continue with $results etc

运行正常。当我尝试在prod上运行此迁移时,我收到消息:

Migration 20161117165412 failed during Pre-Checks. Error SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user 'valid_username'@'valid_host' for table 'table'

该应用程序有一个已定义的连接/实体管理器,并且该站点工作正常。我真的不明白这里可能会有什么影响?我确信有些配置,但我没有想法。

我已经检查了mysql.user中设置的权限,并且'valid_username'的所有权限都设置为N,这很奇怪,因为我希望应用程序也会因读取权限而失败。

1 个答案:

答案 0 :(得分:0)

如果ContainerAwareInterface没有依赖关系,那么在parameters.yml中定义的Symfony的DBAL连接是不可用的。例如,检查CreateDatabaseDoctrineCommand,因为它从容器获得连接。

我假设您拥有从Symfony\Component\Console\Command继承的迁移类,因此最简单的解决方案是继承Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand和容器,resp。可以访问默认连接。

另一个解决方案是创建自己的Doctrine\DBAL\Connection对象,在其中使用DB连接参数的构造方法。