2011-03-16 5 views
5

J'essaie d'exécuter du code SQL personnalisé pour récupérer certains objets de modèle dans une application Symfony. J'ai trouvé un tutoriel sur le web qui disait que quelque chose comme ça me permettrait d'exécuter la requête mais pas de peupler les modèles (peupler le modèle n'est pas un problème majeur, c'est juste pour les données en lecture seule).Exécution de SQL personnalisé dans symfony

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

Mais je suis en train une erreur:

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

Répondre

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

Le ResultSet est un tableau.

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); 
    ... 
} 

Ce code n'est pas très court mais permet d'exécuter une requête personnalisée via la connexion Doctrine existante et de recevoir votre objet à la fin.

0

Pour répondre à votre question (ce qui se fait à partir d'une tâche):

$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']; 

En supposant que la source de données est configuré en tant que tel: dsn: mysql: host = undomaine; dbname = dbname '

Ce code vous permet de récupérer les informations de connexion de base de données de toute connexion, il fonctionnera pour plusieurs connexions ainsi

J'espère que cela aide ...

Questions connexes