bux
Intento escribir una consulta (con subconsulta) pero no sé cómo establecer un límite en mi subconsulta. mi consulta:
$query_ids = $this->getEntityManager()
->createQuery(
"SELECT e_.id
FROM MuzichCoreBundle:Element e_
WHERE [...]
GROUP BY e_.id")
->setMaxResults(5);
$query_select = "SELECT e
FROM MuzichCoreBundle:Element e
WHERE e.id IN (".$query_ids->getDql().")
ORDER BY e.created DESC, e.name DESC";
$query = $this->getEntityManager()
->createQuery($query_select)
->setParameters($params);
Pero ->establecerResultadosMax(5) no funciona No LIMIT
en la consulta SQL. ¿Podemos hacer un LÍMITE simple con la doctrina 2?
$query_ids = $this->getEntityManager()
->createQuery(
"SELECT e_.id
FROM MuzichCoreBundle:Element e_
WHERE [...]
GROUP BY e_.id")
->setMaxResults(5)
->setMaxResults($limit)
;
AQUÍ en la segunda consulta se debe pasar el resultado de la primera consulta..
$query_select = "SELECT e
FROM MuzichCoreBundle:Element e
WHERE e.id IN (".$query_ids->getResult().")
ORDER BY e.created DESC, e.name DESC"
;
$query = $this->getEntityManager()
->createQuery($query_select)
->setParameters($params)
->setMaxResults($limit);
;
$resultCollection = $query->getResult();
-
Su respuesta está funcionando, es lo que uso en mi código de producción desde que hice la pregunta. Pero en mi pregunta busco establecer un LÍMITE en mi primera consulta, para usar su DQL en la segunda consulta. (y hacer solo una consulta de base de datos).
– bux
11 de abril de 2012 a las 14:48
-
¿Es ese código válido o pseudocódigo? Cuando intento que Symfony falle con
Notice: Array to string conversion
Puedo probar un Hydrator personalizado para devolver una matriz unidimensional e implosionar eso porque no parece haber uno ya construido que haga eso: docs.doctrine-project.org/en/2.1/reference/…– HMR
19 de junio de 2014 a las 2:46
-
Tenga cuidado si usa JOIN en su DQL. No funcionará como se esperaba: docs.doctrine-project.org/projects/doctrine-orm/en/latest/…
– Alejandro Fiore
16/09/2015 a las 21:15
Óscar
yo suelo Doctrine\ORM\Tools\Pagination\Paginator
para esto, y funciona perfectamente (doctrina 2.2).
$dql = "SELECT p, c FROM BlogPost p JOIN p.comments c";
$query = $entityManager->createQuery($dql)
->setFirstResult(0)
->setMaxResults(10);
$paginator = new Paginator($query, $fetchJoinCollection = true);
-
La pregunta es cómo limitar las entidades de subconsulta, por ejemplo, entidades relacionadas.
– Serhii Smirnov
7 de noviembre de 2016 a las 16:15
Su setMaxResults($límite) debe establecerse en el objeto.
p.ej
$query_ids = $this->getEntityManager()
->createQuery(
"SELECT e_.id
FROM MuzichCoreBundle:Element e_
WHERE [...]
GROUP BY e_.id")
;
$query_ids->setMaxResults($limit);
-
No funciona en mi caso. Cuando uso $query_ids->getDql() falta el LÍMITE.
– bux
11 de abril de 2012 a las 14:46
-
¿Por qué esto tiene votos a favor? es exactamente lo mismo que el OP pero solo agrega más asignaciones a la misma variable
– Mathijs Seger
7 de noviembre de 2014 a las 11:05
Badrèddine
$limit=5; // for exemple
$query = $this->getDoctrine()->getEntityManager()->createQuery(
'// your request')
->setMaxResults($limit);
$results = $query->getResult();
// Done
ajay singh
Puedes hacer esto:
$qb = $this->getDoctrine()->getManager()->createQueryBuilder();
$qb->select('p')->from('Pandora\UserBundle\Entity\PhoneNumber', 'p');
$qb->where('p.number = :number');
$qb->setMaxResults(1);
$qb->setParameter('number',$postParams['From'] );
$result = $qb->getQuery()->getResult();
-
Bienvenido a StackOverflow, lea esta guía para comprender cómo escribir una buena respuesta: stackoverflow.com/help/how-to-answer Debe agregar algo de contexto al código y explicar cómo/por qué funciona.
–Graham
11 de agosto de 2017 a las 11:47
-
Bienvenido a StackOverflow, lea esta guía para comprender cómo escribir una buena respuesta: stackoverflow.com/help/how-to-answer Debe agregar algo de contexto al código y explicar cómo/por qué funciona.
–Graham
11 de agosto de 2017 a las 11:47
MySQL aún no es compatible con ‘LIMIT & IN/ALL/CUALQUIERA/ALGUNAS subconsultas’
– Serhii Smirnov
7 de noviembre de 2016 a las 16:14
enlace de prueba para ‘doctrine NO es compatible
limit
ensubqyery
‘ es : github.com/doctrine/orm/issues/3979 ¡así que use la consulta sql directa nativa!– Vladimir Ch.
18 abr 2019 a las 20:57