2017-02-10 13 views
0

Мне нужно выполнить миграцию данных вместе с миграцией схемы. Я использую функциии 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, что странно, потому что я ожидаю, что приложение также потерпит неудачу при привилегиях чтения.

+0

Ключи должны быть установлены в '$ this-> connection' - откуда оно взялось? –

+0

Это проект symfony, обычно учетные данные находятся в файле parameters.yml – stevenll

+0

Я имел в виду объект подключения - вы сказали, что у вас нет зависимости от ContainerAwareInterface, так откуда он взялся? –

ответ

0

Если нет зависимости от ContainerAwareInterface, то соединение DBAL от Symfony, определенное в параметрах.yml, недоступно. Например, проверьте CreateDatabaseDoctrineCommand, поскольку он получает соединение с контейнером.

Я предполагаю, что у вас есть класс миграции, унаследованный от Symfony\Component\Console\Command, поэтому самым простым решением было бы наследовать Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand и контейнер, соответственно. соединение по умолчанию будет доступно.

Другим решением было бы создать собственный объект Doctrine\DBAL\Connection, который принимает параметры связи DB в его методе contruct.