2017-02-10 80 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 

這是運行良好。當我嘗試運行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,這很奇怪,因爲我期望應用程序在讀取權限時也失敗。

+0

應該在'$ this-> connection'中設置credentals - 它來自哪裏? –

+0

這是一個symfony項目,通常憑證在parameters.yml文件中 – stevenll

+0

我的意思是連接對象 - 你說你沒有依賴於ContainerAwareInterface,所以它來自哪裏? –

回答

0

如果ContainerAwareInterface沒有依賴關係,那麼在parameters.yml中定義的Symfony的DBAL連接不可用。例如,當它從容器中獲取連接時,請檢查CreateDatabaseDoctrineCommand

我假設你有從Symfony\Component\Console\Command繼承的遷移類,所以最簡單的可能的解決方案是繼承Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand和容器,默認連接將被訪問。

另一種解決方案是創建自己的Doctrine\DBAL\Connection對象,該對象在其構造方法中使用DB連接參數。