php - Symfony Doctrine 迁移 $connection 没有权限

标签 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

运行良好。当我尝试在产品上运行此迁移时,我收到消息:

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,这很奇怪,因为我希望应用程序在读取权限上也会失败。

最佳答案

如果 ContainerAwareInterface 没有依赖项,则在parameters.yml 中定义的 Symfony 的 DBAL 连接不可用。例如,在从容器获取连接时检查 CreateDatabaseDoctrineCommand

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

另一个解决方案是创建自己的 Doctrine\DBAL\Connection 对象,该对象在其构造方法中获取数据库连接参数。

关于php - Symfony Doctrine 迁移 $connection 没有权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42169599/

相关文章:

php - 克隆 Laravel 项目并安装 composer 和 npm 然后也给我错误 500 page not found

java - 使用 hessian 从 android 发送 double 到 php 时出现解析错误

mysql - 将字符串添加到 select 语句以包含在结果集中

mysql - 从 SQL 查询中排除一些结果

Symfony 2 JMS Serializer Bundle - 仅序列化用户 friend 的 ID

php - ZF2 "Unable to render template"Zend 在错误的目录中查找

PHP 超链接变量中的空格

MySQL 使用内连接进行更新

symfony - 将 PersistentCollection 添加到 fixture 中的对象

php - Doctrine -OneToMany关系,所有结果行均未在对象中提取