繁体   English   中英

Symfony2:如何将“ Doctrine-> getRepository-> find”从实体转换为数组?

[英]Symfony2: How to convert 'Doctrine->getRepository->find' from Entity to Array?

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

目前,我正在:

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

但是现在$ product是一个实体,其中包含我想要的所有内容,但作为对象。 如何将它们转换为数组?

我在某处阅读到需要使用“ Doctrine \\ ORM \\ Query :: HYDRATE_ARRAY”的信息,但似乎“ findOneBy”魔术过滤器不接受此类参数。

*
* @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);

当您想更改水合模式时,我建议使用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传递之前进行更改,例如,格式化日期或省略不必要的属性。

如果您要使用单个实体,请执行以下两种方法:

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

不得已时,您可以通过以下方法将其转换为数组,就像其他任何PHP对象一样:

$array = (array) $entity

注意:这可能会产生意想不到的结果,因为您正在使用的是教义代理类,在更高版本的教义中也可能会发生变化。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM