Doctrine2 нативные запросы

Лично мне известно 3 способа делать нативные запросы в Doctrine.

1. Считаю его простым и самым правильным:

$id = 1;
$stmt = $this->getDoctrine()->getEntityManager()->getConnection()
    ->prepare('select * from product where id = :id)');
$stmt->bindValue('id', $id);
$stmt->execute();
$result = $stmt->fetchAll();

или

$result = $this->em->getConnection()->executeQuery(
   'SELECT * FROM product WHERE id = :id',
   array('id' => $id),
   array('id' => \PDO::PARAM_INT)
);

2. Однако, иногда хочется написать в запросе IN

$result = $this->em->getConnection()->executeQuery(
    'SELECT * FROM product WHERE id IN (?)',
    array(array(1, 2, 3)),
    array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
->fetchAll();

* такой запрос не работает с именованными параметрами и как Вы видите, мы используем знак вопроса.

3. Поэтому, лично я предпочитаю использовать вариант, который в IN заинектит данные + мы заиспользуем именованные параметры:

$rsm = new ResultSetMapping;
$rsm->addIndexByScalar('id');
$rsm->addScalarResult('name', 'product_title');
$rsm->addScalarResult('products', 'products_count');
$result = $this->_em->createNativeQuery('
       SELECT
         p.id,
         p.title as name,
         COUNT(p.*) as products
      FROM
         product p
      WHERE
         p.id IN (:ids)
      GROUP BY p.title', $rsm)
->setParameter('ids', [1,2,3])
->getResult();

Удачки ребята.

Оцени публикацию:
  • 0,0
Оценили человек: 0

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Введите изображенные цифры:
Captcha
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2017 YaPro.Ru

Главная » Веб-мастеру » MySQL »