2017-02-10 21 views
0

私は、スキーマの移行に沿ってデータ移行を行う必要があります。 preUp()postUp()関数を使用してデータをフェッチし、スキーマの移行を適用し、新しい列を古いデータで更新します。

私は少なくとも6000レコードに触れているので、私は生のクエリを使いたいと思っていました。 ContainerAwareInterfaceからの依存関係はありません。私のローカルコピーでは、次のようなことをします:

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

これはうまく動作しています。アプリケーションは1定義した接続/エンティティマネージャとサイトが正常に動作している

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' 

:私はPROD上でこの移行を実行しようとすると、私はメッセージが表示されます。私はここに何が影響しているのか本当に理解できないのですか?私は確かにいくつかの設定が、私はアイデアを使い果たした。

私はmysql.userで設定された権限をチェックしており、 'valid_username'のすべての権限はNに設定されています。これは、アプリケーションが読み取り権限でも失敗することが予想されるためです。

+0

クレデンシャルは '$ this-> connection'で設定する必要があります - どこから来ますか? –

+0

これはsymfonyプロジェクトです。通常、資格情報はparameters.ymlファイルにあります。 – stevenll

+0

私は接続オブジェクトを意味しました。あなたはContainerAwareInterfaceからの依存関係がないと言ったので、どこから来たのですか? –

答えて

0

ContainerAwareInterfaceからの依存関係がない場合、parameters.ymlで定義されているSymfonyのDBAL接続は利用できません。たとえば、コンテナからの接続を取得するときにCreateDatabaseDoctrineCommandをチェックします。

Symfony\Component\Console\Commandから継承した移行クラスがあると仮定して、最も簡単な解決策はSymfony\Bundle\FrameworkBundle\Command\ContainerAwareCommandとコンテナrespを継承することです。デフォルトの接続にアクセスできます。

もう1つの解決策は、contructメソッド内でDB接続パラメータを取るオブジェクトDoctrine\DBAL\Connectionを作成することです。

関連する問題