2011-11-25 18 views
10
$shops = $this->em->getRepository('models\Shop')->findAll(); 

Bir dizimi varlıklar ile birlikte verir, ancak varlık olarak diziye ihtiyacım var.Bir sorgunun sonucunu dizi dizisine dönüştürme

Varlıkları bir diziye nasıl dönüştürebilirim?

+0

* varlık olarak varlık * Varlık nasıl görünür ve dizi nasıl görünür? – hakre

cevap

12

Aynı sorunu yaşadım. return get_object_vars($this), iç doktrin nesnesini/özelliklerini de dönüştürdüğü için iyi bir çözüm değildir. Bazı araştırmalardan sonra bu sınıfı buldum: EntitySerializer, varlıklarınızdan temiz dizi veya JSON oluşturur ve gereksiz öğeleri kaldırır.Örnekleme, here bulunur. aşağıdaki kodu:

$patientProfile = $this->em->getRepository('Entities\Patientprofile')->findOneByuserid('2222222'); 
$entitySerializer=new Bgy\Doctrine\EntitySerializer($this->em); 
$patientProfile=$entitySerializer->toArray($patientProfile); 
+0

Zend Framework 2'ye nasıl yüklerim? Aptal gibi mi açıklarsın? :) – Arvangen

+0

Bunu yapmak için bilinen en iyi yöntem budur. Aferin! – manix

16

Doktrini yapalım sorguları, yürütme zaman döndürülen sonuçların veri türünü değiştirmek bir hidrasyon modunu belirlemenizi sağlar. Bu durumda, Query :: HYDRATE_ARRAY. Bu, depolarda bulunan varsayılan findAll() yönteminde belirtmenize izin vermez. Bunun için kendi DQL'inizi yazmanız gerekecektir.

Eğer diziler olarak entites bir koleksiyon gerekirse: Eğer örneğin bir dizi olarak tek bir varlık gerekiyorsa

$query = $em->createQuery('SELECT u FROM User u'); 
$entites = $query->execute(array(), Query::HYDRATE_ARRAY); 

// If you don't have parameters in the query, you can use the getResult() shortcut 
$query = $em->createQuery('SELECT u FROM User u'); 
$entities = $query->getResult(Query::HYDRATE_ARRAY); 

. Belirli numarası:

$query = $em->createQuery('SELECT u FROM User u WHERE u.id = ?1'); 
$query->setParameter(1, $id); 
$entity = $query->getSingleResult(Query::HYDRATE_ARRAY); 

Bu yöntemler Query ve AbstractQuery tanımlanır.

+4

Ancak bu, soyut EntityRepository-> findAll() yöntemiyle kullanılmasını olanaksız kılar. –

İlgili konular