Выполнение пользовательского SQL в symfony

Я пытаюсь выполнить некоторый пользовательский SQL для извлечения некоторых объектов модели в приложении Symfony. Я нашел учебное пособие в Интернете, в котором говорится, что что-то вроде этого позволит мне выполнить запрос, хотя не заполнять модели (заполнение модели не является серьезной проблемой, это просто данные только для чтения).

$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 

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

Набор результатов – это массив.

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

Этот код не очень короткий, но позволяет выполнять пользовательский запрос через существующее соединение Doctrine и получать ваш объект в конце.

Чтобы ответить на ваш вопрос (это делается из задачи):

 $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: host = somedomain; dbname = dbname'

Этот код позволяет получить информацию о подключении к базе данных любого соединения, поэтому он будет работать и для нескольких подключений

Надеюсь, это поможет…