Symfony2:如何转换' Doctrine-> getRepository-> find'从实体到数组?

时间:2014-06-10 17:11:37

标签: php symfony doctrine-orm

我想返回带有记录信息的\ Symfony \ Component \ HttpFoundation \ JsonResponse,但我需要将其作为数组传递。

目前我这样做:

$repository = $this->getDoctrine()->getRepository('XxxYyyZzzBundle:Products');
$product = $repositorio->findOneByBarCode($value);

但现在$ product是一个实体,包含我想要的所有东西,但是作为对象。我怎么能把它们转换成数组?

我读到了我需要使用的地方" Doctrine \ ORM \ Query :: HYDRATE_ARRAY"但似乎找到了一个'魔术过滤器不接受这样的参数。

*
* @return object|null The entity instance or NULL if the entity can not be found.
*/
public function findOneBy(array $criteria, array $orderBy = null)

非常感谢dbrumann我让它工作,只想添加完整的工作示例。

似乎 - > from()需要2个参数。

    $em = $this->getDoctrine()->getManager();  
    $query = $em->createQueryBuilder()  
            ->select('p')  
            ->from('XxxYyyZzzBundle:Products','p')  
            ->where('p.BarCode = :barcode')  
            ->setParameter('barcode', $value)  
            ->getQuery()  
            ;  

    $data = $query->getSingleResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);

3 个答案:

答案 0 :(得分:9)

如果您想更改补水模式,我建议您使用QueryBuilder

$query = $em->createQueryBuilder()
            ->select('p')
            ->from('Products p')
            ->where('p.BarCode = :barcode')
            ->setParameter('barcode', $valur)
            ->getQuery()
;
$data = $query->getSingleResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);

但可能更好的方法是向您的模型/实体添加toArray() - 或toJson() - 方法。这样,您不需要额外的代码来检索实体,并且可以在将模型传递为JSON之前更改模型的数据,例如格式化日期或省略不必要的属性。

答案 1 :(得分:5)

如果您正在使用单个实体,请完成以下两种方式:

$hydrator = new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($entityManager);
$entityArray = $hydrator->extract($entity);

最后,您可以通过以下方式转换为类似于任何其他PHP对象的数组:

$array = (array) $entity

注意:这可能会产生意想不到的结果,因为您可能正在使用doctrine代理类,这些类也可能在以后的Doctrine版本中更改。

答案 2 :(得分:2)

Can also be used:
$query = $em->createQueryBuilder()
            ->select('p')
            ->from('Products', 'p')
            ->where('p.BarCode = :barcode')
            ->setParameter('barcode', $valur)
            ->getQuery()
;
$data = $query->getArrayResult();