sql - force - Symfony2 Using Query in Custom Repository Class
symfony repository (1)
Parece que mezcla DQL y SQL. Puede ver lo que es posible con DQL aquí .
En cuanto a su consulta, le sugiero que utilice SQL en lugar de DQL.
Un ejemplo de cómo hacer una consulta sql dentro de un repositorio:
$sql = ''SELECT * FROM table WHERE id = :id'';
$params = array(
''id'' => 4,
);
return $this->getEntityManager()->getConnection()->executeQuery($sql, $params)->fetchAll();
Tengo una clase de repositorio con un método para llamar a una consulta personalizada. Cuando trato de llamar a findAllWithRating()
desde dentro de un controlador obtuve la siguiente excepción:
[2/2] QueryException: [Syntax Error] line 0, col 156: Error: Unexpected ''NULL''
Si intento llamar a la consulta dentro de phpmyadmin, ¡la consulta funciona muy bien!
¿Alguna idea?
<?php
namespace Anchorbrands/Bundle/MessageBundle/Entity;
use Doctrine/ORM/EntityRepository;
class MessageRepository extends EntityRepository
{
public function findAllWithRating() {
return $this->getEntityManager()
->createQuery("SELECT id, user_id, title, slug, content, question, image_name, created_at, updated_at,
MAX(CASE WHEN rating = ''1'' THEN totalCount ELSE NULL END) ''Rating 1'',
MAX(CASE WHEN rating = ''2'' THEN totalCount ELSE NULL END) ''Rating 2'',
MAX(CASE WHEN rating = ''3'' THEN totalCount ELSE NULL END) ''Rating 3''
FROM
(
SELECT a.id, a.user_id, a.title, a.slug , a.content, a.question, a.image_name, a.created_at, a.updated_at,
rating, COUNT(*) totalCount
FROM AnchorbrandsMessageBundle:Message a
LEFT JOIN AnchorbrandsMessageBundle:Rating b
ON a.id = message_id
GROUP BY a.id, a.user_id, a.title, a.slug, a.content, a.question, a.image_name, a.created_at, a.updated_at, rating
) r
GROUP BY id, user_id, title, slug, content, question, image_name, created_at, updated_at")->getResult();
}
}