我想返回带有记录信息的\ 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);
答案 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();