![](/img/trans.png)
[英]How to convert doctrine entity (with relations) object into array (Symfony2)
[英]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.