2011-08-31 10 views
18

मेरे पास एक साधारण इकाई है जो मेरे उपयोगकर्ता डेटा धारण करने वाली एक तालिका है और मैं एक विशिष्ट उपयोगकर्ता के सभी कॉलम को सरणी के रूप में लाने के लिए चाहता हूं और फिर उन्हें json_encode लेकिन मुझे जो मिलता है वह एक इकाई वस्तु है जिसे मुझे विधि प्राप्त करने के लिए उपयोग करना होगा हर मूल्य के लिए। मैं बस अपने उपयोगकर्ता टेबल मानों का एक सहयोगी सरणी चाहता हूं। कोड मैंने कोशिश की और (लौटे इकाई वस्तु) काम नहीं किया इस प्रकार हैं: 1.एक सहयोगी सरणी के रूप में Doctrine2 परिणाम ऑब्जेक्ट कैसे प्राप्त करें?

$qb = $this->em->createQueryBuilder(); 
$qb->add('select', 'a') 
->add('from', 'Entities\Adminprofile a') 
->add('where', 'a.userid = 3333'); 
$accounts = $qb->getQuery()->getResult(); 

2.

$account = $this->em->getRepository('Entities\Adminprofile')->findOneBy(
array('userid' => '3333')); 

पुनश्च: im z2d2 परियोजना है, जो में doctrine2 एकीकरण है का उपयोग करते हुए ज़ेंड फ्रेमवर्क।

उत्तर

33

जब आप $accounts = $qb->getQuery()->getResult(); करते हैं तो आप जिस तर्क को प्राप्त करते हैं, वह आपको बताता है कि परिणाम सेट को हाइड्रेट करने के लिए कैसे किया जाएगा।

सरणी हाइड्रेशन

आप सरणियों चाहते हैं, की तुलना में आप सरणी hydrations Doctrine\ORM\Query::HYDRATE_ARRAY के लिए CONSTANT पारित चाहिए।

$ accounts = $ qb-> getQuery() -> getResult (सिद्धांत \ ORM \ क्वेरी :: HYDRATE_ARRAY);

आप findOneBy() उपयोग कर रहे हैं तो यह हमेशा एक इकाई वापस आ जाएगी। कैसे काम करता है के आंतरिक के कारण, आप इसे वापस लौटने के अलावा अन्य किसी भी माध्यम से हाइड्रेट करने के लिए नहीं कह सकते हैं।

public function getSimpleValues(){ 
    return array(
     'id'  => $this->getId(), 
     'lft'  => $this->getLft(), 
     'rgt'  => $this->getRgt(), 
     'name' => $this->getName(), 
     'md5Name' => $this->getMd5Name(),    
     'owner' => $this->getOwner()->getId(), 
     'etag' => $this->getEtag() 
    ); 
} 

हाइड्रेशन एपीआई डॉक्स:: http://www.doctrine-project.org/api/orm/2.1/namespace-Doctrine.ORM.Internal.Hydration.html

+3

अलग जलयोजन मोड के लिए तेजी से और सटीक reply.The स्थिरांक के लिए धन्यवाद अंत भाग में इस तरह यह कर सकते हैं कर रहे हैं: प्रश्न :: HYDRATE_OBJECT क्वेरी :: HYDRATE_ARRAY क्वेरी :: HYDRATE_SCALAR क्वेरी :: HYDRATE_SINGLE_SCALAR –

+0

क्या होगा यदि मैं '$ this-> सिद्धांत-> em-> ढूंढें ('इकाई \ उपयोगकर्ता', 5) 'का उपयोग करना चाहता हूं? – Rorschach

+0

यह मेरी समस्या है, http://stackoverflow.com/questions/25158549/doctrine-entity-object-to-array – Rorschach

21

आप

इस परिदृश्य में, आप क्या करने की जरूरत तो अपनी इकाई के अंदर एक getValues() विधि है जो आपके इकाई की एक सरणी देता है, इस प्रकार बना है भी निरंतर में पारित करने के लिए एक शॉर्टकट के रूप getArrayResult() का उपयोग कर सकते एक सरणी वापस पाने के लिए:

$accounts = $qb->getQuery()->getArrayResult(); 
6

आप हमें ऐसा करना चाहिए ई निरंतर मूल्य 2 युक्त और यह इनबिल्ट है, तो आप आपकी क्वेरी के

$qb->getQuery()->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY); 
1
$data = $this->entity->findOneBy(array('key' => $value)); 

$hydrator = new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($this->_em, $entity_name); 

$array = $hydrator->extract($data); 
+0

यह प्रश्न का उत्तर नहीं है। – Mogsdad