簡體   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