2013-11-28 53 views
1

我想通過symfony 1中的石灰進行測試的用戶友好的方式。我想爲我寫入的每個測試加載特定的SQL轉儲(如果需要)。我面對的問題是我不知道如何獨立於數據庫類型進行轉儲加載。目前我正在使用shell exec()命令。以下是代碼:如何使用symfony加載SQL轉儲

public function loadSql() 
    { 
    $this->diag("Loading dump..."); 
    if ($this->_sql_is_set) 
    { 
     if (file_exists($this->_getSqlPath())) 
     { 
     $this->_emptyDataBase(); 
     $options = $this->_connection_manager->connection()->getOptions(); 
     $dsn_parts = $this->_connection_manager->parsePdoDsn($options['dsn']); 
     exec("mysql -u{$options['username']} -p{$options['password']} {$dsn_parts['dbname']} < {$this->_getSqlPath()}"); 
     return $this; 
     } 
     else 
     { 
     $this->error("Nothing to load : sql file was not found in ".$this->_getDataDir()); 
     exit; 
     } 
    } 
    else 
    { 
     $this->error("Nothing to load : sql dump was not set"); 
     exit; 
    } 
    } 

$this->_connection_manager是Doctrine_Manager的一個實例。任何幫助將與此?

回答

1

嘗試用類似的東西:

public function loadSqlFiles(sfEvent $event) 
{ 
    $task = $event->getSubject(); 
    $taskName = $task->getName(); 
    if ($taskName == 'insert-sql') { 
     $conn = Doctrine_Manager::connection(); 
     $filesPath = sfConfig::get('sf_data_dir') . '/sql/full-data'; 

     // get all files 
     $files = sfFinder::type('file')->sort_by_name()->name('*.sql')->in($filesPath); 
     foreach ($files as $file) { 
      $task->logSection('custom-sql', sprintf('Inserting custom sql file (%s)', $file)); 
      $res = $conn->getDbh()->exec(file_get_contents($file)); 
     } 
    } 
} 
+0

你從哪兒弄來了'getDbh()'方法?通過Doctrine_Manager類中的代碼查看並且沒有這種方法。還運行此代碼,並得到這個錯誤'調用未定義的方法Doctrine_Manager :: getDbh()' –

+0

哦,做了一點研究,並有權訪問'getDbh'方法,我們需要首先調用'getCurrentConnection()'。無論如何Thx暗示。 –

+0

是的你需要有當前連接才能訪問'getDbh'這就是爲什麼'$ conn = Doctrine_Manager :: connection();' –