2015-09-29 45 views
1

我想從實時更新了扳機,我想知道我是否可以使用遷移的,因爲我試過2替代我的遷移:Symfony2的遷移SQL文件

public function up(Schema $schema) 
    { 
     // this up() migration is auto-generated, please modify it to your needs 
     $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); 

     $stmt = $this->connection->prepare(file_get_contents(__DIR__ . '/Version20150929103205/new_trigger_procedure.sql')); 
     $stmt->execute(); 

     $this->addSql(file_get_contents(__DIR__ . '/Version20150929103205/new_trigger_procedure.sql')); 
    } 

,但不起作用。我的SQL文件有多個聲明。是否有可能通過遷移來運行它?

這裏是一個模式:

DROP TRIGGER IF EXISTS trigger_1; Create Trigger trigger_1 BEFORE... DROP Trigger IF EXISTS trigger_2; Create Trigger trigger_2 Before ... . . .

+0

什麼是.sql文件,你可以發佈它?嘗試在控制檯中的同一臺服務器上使用同一用戶執行相同的語句。 – marekful

+0

我更新我的問題......模型是我的查詢在我的sql文件中。 – Laurentiu

+0

好的,現在在一個MySQL控制檯中執行這個文件的內容,這個控制檯是以你的應用程序內執行SQL的用戶身份登錄的,並且看它是否成功執行。從理論上講,它應該可以從Symfony遷移文件中獲得,但是您可能有權限問題。 – marekful

回答

0

唯一的解決辦法是分割的一切成才這樣的:

$this->addSql('DROP TRIGGER IF EXISTS trigger_1'); 
$this->addSql('...'); 
... 

,或者做些事情那樣:

$querys = explode(file_get_contents($file)); 
foreach($querys as $query){ 
    $this->addSql($query); 
} 

但在這種情況下,你應該確定你有指示什麼目的與;並沒有;在插入query或其他一切情況下的值。