2011-03-16 69 views
5

我試圖執行一些自定義SQL來檢索Symfony應用程序中的某些模型對象。我在網上找到一個教程,說這樣的東西可以讓我執行查詢,但不填充模型(填充模型不是主要問題,它只是用於只讀數據)。在symfony中執行自定義SQL

$pdo = Doctrine_Manager::getInstance()->connection()->getDbh(); 
$pdo->prepare("SELECT * from something complicated"); 
$pdo->execute(); 
$this->sensorReadings = $pdo->fetchAll(); 

但我發現了一個錯誤:

Fatal error: Call to undefined method PDO::execute() 
in sfproject/apps/frontend/modules/site/actions/actions.class.php 

回答

9
$query = "SELECT * from something complicated"; 
$rs = Doctrine_Manager::getInstance()->getCurrentConnection()->fetchAssoc($query); 

的結果集是一個數組。

2
// get Doctrine_Connection object 
$con = Doctrine_Manager::getInstance()->connection(); 
// execute SQL query, receive Doctrine_Connection_Statement 
$st = $con->execute("SELECT User.* FROM ...."); 
// fetch query result 
$result = $st->fetchAll(); 

// convert array to objects 
foreach ($result as $userArray) { 
    $user = new User(); 
    $user->fromArray($userArray); 
    ... 
} 

這個代碼是不是很短,但允許通過現有的學說連接執行自定義查詢並接收你的對象到底。

0

要回答你的問題(這是從一個任務完成):

$databaseManager = new sfDatabaseManager ($this->configuration); 
Doctrine_Manager::connection()->setAttribute (Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true); 

$dbOptions = Doctrine_Manager::connection()->getManager()->getConnection ('doctrine')->getOptions(); 
$dbDsn = $dbOptions['dsn']; 
$dbDsnArr = explode (';', $dbDsn); 
$dbHost = str_replace ('mysql:host=', '', $dbDsnArr[0]); 
$dbName = str_replace ('dbname=', '', $dbDsnArr[1]); 
$dbUn = $dbOptions['username']; 
$dbPw = $dbOptions['password']; 

假設DSN如此配置: DSN: 'MySQL的:主機= somedomain; DBNAME = DBNAME'

該代碼可以檢索任何連接的數據庫連接信息,因此它將對多個連接的工作,以及

我希望這有助於...