LIMIT mit Doktrin 2 setzen?

Lesezeit: 3 Minuten

Benutzeravatar von bux
bux

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/…

    – HMR

    19. Juni 2014 um 2:46 Uhr

  • Seien Sie vorsichtig, wenn Sie JOIN in Ihrer DQL verwenden. Es funktioniert nicht wie erwartet: docs.doctrine-project.org/projects/doctrine-orm/en/latest/…

    – Alejandro Fiore

    16. September 2015 um 21:15 Uhr

Benutzeravatar von Oskar
Oskar

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

Benutzeravatar von Badrèddine
Badreddine

$limit=5; // for exemple

$query = $this->getDoctrine()->getEntityManager()->createQuery(
           '// your request')

->setMaxResults($limit);

 $results = $query->getResult();

// Done

Benutzeravatar von ajay singh
ajay singh

Sie können Folgendes tun:

$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();

  • 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

1449320cookie-checkLIMIT mit Doktrin 2 setzen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy