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

的陣列能夠提供我與實體的數組,但我需要的實體陣列。轉換查詢的結果陣列

如何將實體轉換爲數組?

+0

*作爲數組的實體*實體如何看起來像以及數組將如何看起來像? – hakre

回答

12

我有同樣的問題。 return get_object_vars($this)不是一個好的解決方案,因爲它也轉換內部學說對象/屬性。經過一番研究,我發現這個類:EntitySerializer它從你的實體創建乾淨的數組或JSON,並刪除不必要的items.The文檔位於here。例如,我用下面的代碼:

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

如何在Zend Framework 2中安裝它?你能像白癡一樣解釋嗎? :) – Arvangen

+0

這是已知最好的方法。做得好! – manix

16

主義讓你執行查詢,這讓我們在指定的水化模式更改返回結果的數據類型。在這種情況下,您需要Query :: HYDRATE_ARRAY。它不允許您在存儲庫上的默認findAll()方法中指定此方法。你需要爲它編寫你自己的DQL。

如果你需要的entites的集合作爲數組:

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

如果你需要一個單一的實體作爲數組,例如。特定ID:

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

這些方法上Query,和AbstractQuery限定。

+4

但是這使得與抽象的EntityRepository-> findAll()方法一起使用是不可能的。 –