2013-02-23 43 views
6

में एक कॉलम का चयन करें मैं कम संभव मूल्यों का चयन करने की कोशिश कर रहे क्वेरी को परिशोधित करने की कोशिश कर रहा हूं .. उदाहरण के लिए मेरे पास एक इकाई "अनाग्राफ" है जिसमें आपका नाम, पता, शहर इत्यादि, है और एक ऐसा फॉर्म जहां मैं इन क्षेत्रों में से केवल एक को बदलना चाहता हूं, जैसे पता। मैं इस क्वेरी बनाया है:Symfony2 Doctrine

//AnagraficRepository 
public function findAddress($Id) 
{ 
    $qb = $this->createQueryBuilder('r') 
      ->select('r.address') 
      ->where('r.id = :id') 
      ->setParameter('id', $Id) 
      ->getQuery(); 

    return $qb->getResult(); 
} 

वहाँ कुछ इस क्वेरी क्योंकि मैं किसी भी मूल्य नहीं लौटते साथ कुछ गड़बड़ है, लेकिन अगर मैं क्वेरी सामान्य रूप से कार्य करें:

//Controller 
$entity = $em->getRepository('MyBusinessBundle:Anagrafic')->find($id); 

वापसी सही मूल्य। मैं केवल एक कॉलम चुनने के लिए क्वेरी कैसे करूं?

+2

मेरा लक्ष्य के आकार को कम करने के लिए था क्वेरी, प्रदर्शन के संदर्भ में 30 कॉलम से एक कॉलम वापस बेहतर है! – Lughino

+2

तो आप इसे हर जगह करेंगे? मैं इस मामले में कुछ और टेबल के लिए अपनी मेज को बेहतर ढंग से अलग कर दूंगा। – Hast

+4

मैंने सोचा कि प्रदर्शन में हासिल करने का यह एक अच्छा तरीका था! यदि आप सहमत नहीं हैं इससे कोई फर्क नहीं पड़ता .. – Lughino

उत्तर

11

चूंकि आप प्रत्येक रिकॉर्ड के एकल कॉलम का अनुरोध कर रहे हैं, इसलिए आप array की अपेक्षा कर सकते हैं। कहा जा रहा है आप getArrayResult() साथ getResult बदलना चाहिए क्योंकि आप वस्तु जलयोजन लागू नहीं कर सकते:

$data = $qb->getArrayResult(); 
Now, you have structure: 
    $data[0]['address'] 
    $data[1]['address'] 
    .... 

आशा इस मदद करता है।

टिप्पणियों में प्रदर्शन के बारे में चर्चा के लिए मैं आम तौर पर हर समय 30 कॉलम लाने की इच्छा नहीं करता हूं। हालांकि, उस स्थिति में, यदि आप कभी भी डेटाबेस बदल जाते हैं तो प्रभाव को कम करने के लिए आपको नामित प्रश्न लिखने पर विचार करना चाहिए।

+0

वास्तव में मदद के लिए बहुत बहुत धन्यवाद! बिल्कुल वही जानकारी है जो मैं ढूंढ रहा था! – Lughino

7

आप केवल एक क्षेत्र हाइड्रेट करने के लिए partial objects का उपयोग कर सकते हैं और फिर भी एक ऑब्जेक्ट वापस कर सकते हैं।

+2

धन्यवाद! यह भी एक उत्कृष्ट समाधान है! – Lughino

2

उपयोग इस तरह आंशिक वस्तुओं क्षेत्रों का चयन करने के

$qb = $this->createQueryBuilder('r') 
    ->select(array('partial r.{id,address}')) 
    ... 

कोष्ठक

के बीच अपने फील्ड के नाम रखो
+0

... लेकिन दस्तावेज़ों को ध्यान में रखें http://doctrine-orm.readthedocs.org/en/latest/reference/partial-objects.html – TheFrost

3

यह मेरे लिए काम किया:

$qb = $repository->createQueryBuilder('i') 
    ->select('i.name') 
    ->...