2011-11-25 65 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()方法一起使用是不可能的。 –