2017-05-11 2 views
0

Ich stoße auf ein interessantes Thema und jetzt bin ich neugierig auf das "warum". Vielleicht hängt diese Doktrin2 zusammen, vielleicht ist es das nicht, vielleicht ist es nur OOP.Gibt es eine Möglichkeit, das Doctrine2 QueryBuilder-Objekt zu "befreien"?

Werfen Sie einen Blick auf die folgende Lehre Repository-Funktion:

public function generateOrderPush(int $quote_id): array 
{ 
    $group_quote_id = $this->getEntityManager()->getRepository('QuoteBundle:Quote')->find($quote_id)->getGroupQuoteId(); 

    $em = $this->getEntityManager(); 
    $qb = $em->createQueryBuilder(); 

    $header = $qb->select(['q.quoteId','q.othersQuoteId','IDENTITY(q.distributor)']) 
       ->from('QuoteBundle:Quote', 'q') 
       ->where('q.quoteType =:quote_type') 
       ->andWhere('q.groupQuoteId =:group_quote_id') 
       ->setParameter('quote_type', 'current') 
       ->setParameter('group_quote_id', $group_quote_id) 
       ->setMaxResults(1) 
       ->orderBy('q.quoteId', 'ASC') 
       ->getQuery() 
       ->getArrayResult(); 

    $details = $qb->select(['qt.quoteId', 'qt.othersQuoteId', 'IDENTITY(qt.customer)']) 
        ->from('QuoteBundle:Quote', 'qt') 
        ->join('QuoteBundle:QuoteDetail', 'qd', 'WITH', 'qt.quoteId = qd.quoteId') 
        ->where('qt.quoteType =:quote_type') 
        ->andWhere('qt.groupQuoteId =:group_quote_id') 
        ->setParameter('quote_type', 'current') 
        ->setParameter('group_quote_id', $group_quote_id) 
        ->groupBy('qd.renewalPartNumber') 
        ->orderBy('qt.quoteId', 'ASC') 
        ->getQuery() 
        ->getArrayResult(); 

    return []; 
} 

Die erste Abfrage $header ordnungsgemäß ausgeführt und I-Daten zurückkamen. Die zweite Abfrage wird als Fehler $details unten zeigen andernfalls:

SELECT q0_.quote_id quote_id_0 AS, AS q0_.QuoteID QuoteID_1, q0_.CustomerSiteID AS sclr_2, FROM Zitat q1_ INNER JOIN quote_detail q2_ ON (q0_.quote_id = q2_.quote_id), Zitat q0_ WHERE q0_.quote_type = ? UND q0_.group_quote_id =? GROUP BY q2_.RenewalPartNumber ORDER BY q0_.quote_id ASC LIMIT 1' mit params [ "Aktuell", 1428]:

SQLSTATE [42S22]: Säule nicht gefunden: 1054 Unknown column 'q0_.quote_id' in ‚on Klausel‘

ich denke, irgendwie Lehre halten | denke ich an das erste Objekt beziehe mich (aus früheren) Abfrage, wenn ich nicht bin, da ich einen neuen Alias ​​für die zweite Abfrage qt hinzugefügt haben.

Eine Lösung für das Problem könnte in zwei verschiedene Funktionen aufgeteilt werden, aber bevor Sie in diese, würde ich gerne wissen, warum das passiert und ob es andere Möglichkeiten gibt, als das Problem zu beheben.

+0

Sie ohne Fehlermeldung eine Art roher Abfrage als geworfenen Fehler zeigten! – revo

+0

@revo upss, hinzugefügt, um die OP .. – ReynierPM

+0

Sie vermissen ein '' 'in Ihrem 2d auswählen, es ist normal? – Veve

Antwort

0

ein anderes Objekt Querybuilder Verwendung:

public function generateOrderPush(int $quote_id): array 
{ 
    $group_quote_id = $this->getEntityManager()->getRepository('QuoteBundle:Quote')->find($quote_id)->getGroupQuoteId(); 

    $em = $this->getEntityManager(); 
    $qb = $em->createQueryBuilder(); 
    $anotherQb = $em->createQueryBuilder(); 

    $header = $qb->select(['q.quoteId','q.othersQuoteId','IDENTITY(q.distributor)']) 
       ->from('QuoteBundle:Quote', 'q') 
       ->where('q.quoteType =:quote_type') 
       ->andWhere('q.groupQuoteId =:group_quote_id') 
       ->setParameter('quote_type', 'current') 
       ->setParameter('group_quote_id', $group_quote_id) 
       ->setMaxResults(1) 
       ->orderBy('q.quoteId', 'ASC') 
       ->getQuery() 
       ->getArrayResult(); 

    $details = $anotherQb->select(['qt.quoteId', 'qt.othersQuoteId', 'IDENTITY(qt.customer)']) 
        ->from('QuoteBundle:Quote', 'qt') 
        ->join('QuoteBundle:QuoteDetail', 'qd', 'WITH', 'qt.quoteId = qd.quoteId') 
        ->where('qt.quoteType =:quote_type') 
        ->andWhere('qt.groupQuoteId =:group_quote_id') 
        ->setParameter('quote_type', 'current') 
        ->setParameter('group_quote_id', $group_quote_id) 
        ->groupBy('qd.renewalPartNumber') 
        ->orderBy('qt.quoteId', 'ASC') 
        ->getQuery() 
        ->getArrayResult(); 

    return []; 
} 
Verwandte Themen