2011-06-14 10 views
7

मैं इस तरह एक InvoiceItem इकाई मिल गया है के साथ विदेशी कुंजी लौटें * यूनिट मूल्य।DQL क्वेरी

मैं इस तरह एक DQL क्वेरी के साथ योग लौट सकते हैं:

SELECT SUM(I.qty * I.unitPrice) AS amount FROM Entities\\InvoiceItem I 
WHERE I.invoice IN (..) GROUP BY I.invoice 

परिणाम:

array(
    0 => array('amount' => '46.7'), 
    1 => array('amount' => '32.5') 
) 

लेकिन मैं चालान विदेशी कुंजी वापस जाने के लिए कैसे पता नहीं है। मैं

SELECT SUM(I.qty * I.unitPrice) AS amount, I.invoice 
FROM Entities\\InvoiceItem I 
WHERE I.invoice IN (..) GROUP BY I.invoice 

की कोशिश की है लेकिन यह काम नहीं करता है (त्रुटि:। अमान्य PathExpression एक StateFieldPathExpression होना चाहिए।)

मैं चालान आईडी कैसे लौट सकते हैं? और मैं अपने परिणाम सरणी के कुंजी के रूप में आईडी का उपयोग करना चाहते हैं:

array(
    1005 => '46.7', 
    1250 => '32.5' 
) 

जहां 1005 और 1250 चालान की आईडी है।

अद्यतन 2011-06-15

मूल निवासी क्वेरी काम करता है:

$rsm = new \Doctrine\ORM\Query\ResultSetMapping(); 
    $rsm->addScalarResult('invoice_id', 'invoiceId'); 
    $rsm->addScalarResult('amount', 'amount'); 
    $q = $this->getEntityManager()->createNativeQuery(
     'SELECT invoice_id, SUM(qty * unit_price) AS amount FROM invoices_items' 
      .' WHERE invoice_id IN ('.implode(',', $ids).') GROUP BY invoice_id', 
     $rsm 
    ); 
    $result = $q->getResult(); 

परिणाम:

array(
    0 => 
    array(
     'invoiceId' => '1005', 
     'amount' => '46.7' 
    ) 
    1 => 
    array(
     'invoiceId' => '1250', 
     'amount' => '32.5' 
    ) 
) 

लेकिन मैं चालान आईडी के आधार पर सूचकांक करने के लिए एक पाश बनाने की जरूरत है ।

उत्तर

9

आप अपनी इकाई के लिए शेष मूल्यों के साथ विदेशी कुंजी वापस लौटने के लिए setHint() विधि का उपयोग कर सकते हैं। आप क्वेरी (नहीं querybuilder) करने के लिए विधि लागू होते हैं:

$q = $qb->getQuery(); 
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true); 
+0

जहाँ तक मुझे पता है, तुम सिर्फ परिणाम फिर उन्हें एक नई सरणी बनाने आपका चालान आईडी के रूप में कार्य करने के लिए के माध्यम से लूप अर्जित करने होंगे सरणी कुंजी –

+0

HINT_INCLUDE_META_COLUMNS काम करता है, लेकिन मुझे कम से कम एक फ़ील्ड को शामिल करने की आवश्यकता है: SELECT SUM (I.qty * I.unitPrice) AS राशि, भाग I। {Id} ... – Maxence

+0

सच है, मुझे नहीं लगता कि वैसे भी है उसके चारों ओर –

संबंधित मुद्दे