2011-08-31 13 views
18

Kullanıcı verilerimi tutan bir tablo olan basit bir varlık var ve belirli bir kullanıcının tüm sütunlarını bir dizi olarak almak istiyorum ve daha sonra json_encode bunları elde etmek istiyorum ama alma yöntemi kullanmak zorunda kalacağım bir varlık nesnesi her değer için. Sadece kullanıcı tablo değerlerimin ilişkilendirici bir dizisini istiyorum. aşağıdaki gibi kodları denedim ve (döndürülen varlık nesnesi) işe yaramadı şunlardır: 1.Doctrine2 sonuç nesnesinin ilişkisel bir dizi olarak nasıl edinilir?

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

PS: içine doctrine2 entegrasyon olduğunu z2d2 Projesi kullanarak im Zend çerçevesi

cevap

33

$accounts = $qb->getQuery()->getResult();'u yaptığınızda, getResult'a ilettiğiniz argümana, sonuç kümesinin nasıl geri döneceğini söyler. Eğer dizi hydrations Doctrine\ORM\Query::HYDRATE_ARRAY için CONSTANT geçmelidir daha

Dizi Hidrasyon

Eğer diziler istiyorum.

$ accounts = $ qb-> getQuery() -> getResult (Doctrine \ ORM \ Query :: HYDRATE_ARRAY);

Eğer o zaman hep bir varlık döndürür olacak findOneBy() kullanıyorsanız. Buluntunun nasıl çalıştığına dair içsel varlıklar nedeniyle, varlıkları geri döndürmek dışında başka yollarla hidratlamadığını söyleyemezsiniz.

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

Hidrasyon API Dokümanlar: http://www.doctrine-project.org/api/orm/2.1/namespace-Doctrine.ORM.Internal.Hydration.html

+3

sayesinde Sorgunuzun uç kısmında böyle yapabiliriz şunlardır: Sorgu :: HYDRATE_OBJECT Sorgu :: HYDRATE_ARRAY Sorgu :: HYDRATE_SCALAR Sorgu :: HYDRATE_SINGLE_SCALAR –

+0

ne ben $ 'gibi kullanmak istiyorsanız this-> doctrine-> em->' (5 'Varlık \ User',) bulmak? – Rorschach

+0

Bu benim sorunum, http://stackoverflow.com/questions/25158549/doctrine-entity-object-to-array – Rorschach

21

You Bu senaryoda

yapmanız gerekenler bu gibi varlığın dizisi döndürür senin varlığın içinde bir getValues() yöntemini oluşturmak olduğunu Ayrıca sabit geçen kısayol olarak getArrayResult() kullanabilir geri dizisini almak için:

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

bize should e sabit bir değer 2 içeren ve dahili olduğu, farklı hidratasyon modları için hızlı ve hassas reply.The sabitleri için

$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

Bu sorunun cevabı değil. – Mogsdad