Ich versuche, eine Abfrage (mit Unterabfrage) zu schreiben, aber ich weiß nicht, wie ich ein Limit in meiner Unterabfrage festlegen kann. Meine Abfrage:
$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);
Aber ->setMaxResults(5) funktioniert nicht. NEIN LIMIT in der SQL-Abfrage. Können wir mit Doktrin 2 ein einfaches LIMIT machen?
MySQL unterstützt noch nicht ‘LIMIT & IN/ALL/ANY/SOME subquery’
– Serhij Smirnov
7. November 2016 um 16:14 Uhr
Beweislink für ‘Lehre unterstützt NICHT limit In subqyery‘ Ist : github.com/doctrine/orm/issues/3979 Verwenden Sie also die native direkte SQL-Abfrage!
– Wladimir Ch
18. April 2019 um 20:57 Uhr
$query_ids = $this->getEntityManager()
->createQuery(
"SELECT e_.id
FROM MuzichCoreBundle:Element e_
WHERE [...]
GROUP BY e_.id")
->setMaxResults(5)
->setMaxResults($limit)
;
HIER soll in der zweiten Abfrage das Ergebnis der ersten Abfrage übergeben werden..
$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();
Ihre Antwort funktioniert, es ist das, was ich in meinem Produktionscode verwende, seit ich die Frage stelle. Aber in meiner Frage suche ich nach einem LIMIT für meine erste Abfrage, um seine DQL in der zweiten Abfrage zu verwenden. (und nur eine Datenbankabfrage durchführen).
– bux
11. April 2012 um 14:48 Uhr
Ist das gültiger Code oder Pseudocode? Wenn ich das versuche, bricht Symfony mit ab Notice: Array to string conversion Ich kann einen benutzerdefinierten Hydrator ausprobieren, um ein eindimensionales Array zurückzugeben und das zu implodieren, da anscheinend noch keiner gebaut wurde, der dies tut: docs.doctrine-project.org/en/2.1/reference/…
ich benutze Doctrine\ORM\Tools\Pagination\Paginator dafür, und es funktioniert perfekt (Lehre 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);
Die Frage ist, wie Unterabfrage-Entitäten eingeschränkt werden können, z. B. verwandte Entitäten.
– Serhij Smirnov
7. November 2016 um 16:15 Uhr
Dein setMaxResults($limit) muss am Objekt gesetzt werden.
z.B
$query_ids = $this->getEntityManager()
->createQuery(
"SELECT e_.id
FROM MuzichCoreBundle:Element e_
WHERE [...]
GROUP BY e_.id")
;
$query_ids->setMaxResults($limit);
Funktioniert in meinem Fall nicht. Wenn ich $query_ids->getDql() verwende, fehlt das LIMIT.
– bux
11. April 2012 um 14:46 Uhr
Warum hat das Upvotes? Es ist genau das gleiche wie das OP, aber es fügt nur mehr Zuweisungen zu derselben Variablen hinzu
– Mathijs Segers
7. November 2014 um 11:05 Uhr
Badreddine
$limit=5; // for exemple
$query = $this->getDoctrine()->getEntityManager()->createQuery(
'// your request')
->setMaxResults($limit);
$results = $query->getResult();
// Done
Willkommen bei StackOverflow, bitte lesen Sie diese Anleitung, um zu verstehen, wie man eine gute Antwort schreibt: stackoverflow.com/help/how-to-answer Sie sollten dem Code etwas Kontext hinzufügen und erklären, wie/warum dies funktioniert.
– Graham
11. August 2017 um 11:47 Uhr
Willkommen bei StackOverflow, bitte lesen Sie diese Anleitung, um zu verstehen, wie man eine gute Antwort schreibt: stackoverflow.com/help/how-to-answer Sie sollten dem Code etwas Kontext hinzufügen und erklären, wie/warum dies funktioniert.
– Graham
11. August 2017 um 11:47 Uhr
14493200cookie-checkLIMIT mit Doktrin 2 setzen?yes
MySQL unterstützt noch nicht ‘LIMIT & IN/ALL/ANY/SOME subquery’
– Serhij Smirnov
7. November 2016 um 16:14 Uhr
Beweislink für ‘Lehre unterstützt NICHT
limit
Insubqyery
‘ Ist : github.com/doctrine/orm/issues/3979 Verwenden Sie also die native direkte SQL-Abfrage!– Wladimir Ch
18. April 2019 um 20:57 Uhr