2015-05-18 3 views
0

Я занимаюсь разработкой базового веб-приложения в своей работе. Мне нужно работать с некоторыми представлениями sql-сервера. Я принял решение попробовать собственные запросы, и как только вы протестировали его функциональность, попробуйте написать несколько классов, чтобы закодировать все запросы и забыть о своей реализации.Основы базовых запросов Symfony2 Doctrine2

Итак, моя проблема: у меня есть Entity в Acme/MyBundle/Entity/View1.php. У этого объекта есть все атрибуты, соответствующие таблице, а также это геттеры и сеттеры. Я предполагаю, что эта сущность хорошо сопоставлена ​​с БД (работа над доктриной без особых усилий).

Моя цель - позволить контроллеру получить некоторые данные из этих представлений (SQL SERVER) и вернуть их в представление (веточка), чтобы он мог отображать информацию.

$returned_atts = array(
    "att1" => $result[0]->getAttribute1(), //getter from the entity 
    "att2" => $result[1]->getAttribute2(), //getter from the entity 
); 

    return $returned_atts;`$sql = "SELECT [Attribute1],[Attribute2],[Attribute3] FROM [TEST].[dbo].[TEST_VIEW1]"; //THIS IS THE SQL SERVER QUERY 
    $rsm = new ResultSetMapping($em); //result set mappin object 
    $rsm->addEntityResult('Acme\MyBundle\Entity\View1', 'view1'); //entity which is based on 
    $rsm->addFieldResult('view1', 'Attribute1', 'attribute1'); //only choose these 3 attributes among the whole available 
    $rsm->addFieldResult('view1', 'Attribute2', 'attribute2'); 
    $rsm->addFieldResult('view1', 'Attribute3', 'attribute3'); 
    //rsm built 
    $query = $em->createNativeQuery($sql, $rsm); //execute the query 
    $result = $query->getResult(); //get the array 

Должна быть предусмотрена возможность вернуть массив прямо из метода getResult() не так ли? И что убивает меня, как я могу получить доступ к атрибуту1, attriute2 и attriute2?

$returned_atts = array(
    "att1" => $result[0]->getAttribute1(), //getter from the entity 
    "att2" => $result[1]->getAttribute2(), //getter from the entity 
); 

    return $returned_atts;` 

ответ

0

Если вы хотите получить результат как массив, вам не нужно использовать ResultSetMapping.

$sql = " SELECT * FROM some_table"; 
$stmt = $this->getDoctrine()->getEntityManager()->getConnection()->prepare($sql); 
$stmt->execute(); 
$result = $stmt->fetchAll(); 

Это основной пример действия контроллера. Вы можете сбросить результат, используйте var_dump(), чтобы узнать, как получить доступ к вашим конкретным значениям полей.

Другие примеры здесь Doctrine raw sql

Смежные вопросы