如何将Doctrine2实体图转换为数组

Opt*_*mus 3 orm doctrine-orm

我有以下实体

我想要做的是当我通过id获取Product时,我想将其转换为包括所有相关实体(包括其相关条目)的数组.

结果数组需要可序列化.

Pet*_*ell 6

使用doctrine查询构建器和HYDRATE_ARRAY水合模式?

编辑:很抱歉不包括示例,我当时在手机上.查看我写的一些博客文章,其中介绍了一些与此相关的学说的良好实践.

对于一个代码示例,我将编写的存储库方法将如下所示(我会避免使用类似的缩写p c等,因为它会使您的代码的可读性降低很多(至少在您开始使用doctrine时...)

<?php

namespace Vendor\Prefix\Repository;

use Doctrine\ORM\EntityRepository;

class ProductRepository extends EntityRepository
{
    public function find($id)
    {
        // $em is the entity manager
        $qb = $em->createQueryBuilder();

        $qb
            ->select('product', 'category', 'tag', 'brand', 'category_child')
            // Or SomeBundle:Product if you're on symfony
            ->from('Vendor\Prefix\Entity\Product', 'product')
            // You need to explicitly fetch join all your 
            // associations...and select them
            ->leftJoin('product.Brand', 'brand')
            ->leftJoin('product.Tags', 'tag')
            ->leftJoin('product.Categories', 'category')
            ->leftJoin('category.Children', 'category_child')
            // Use prepared statments...its a good habit
            ->where($qb->expr()->eq('product.ID', ':id'))
            ->setParameter('id', $id)
        ;

        $query = $qb->getQuery();

        // Potential Hydration Modes
        // --------------------------------
        // Doctrine\ORM\Query::HYDRATE_OBJECT
        // Doctrine\ORM\Query::HYDRATE_ARRAY 
        // Doctrine\ORM\Query::HYDRATE_SCALAR
        // Doctrine\ORM\Query::HYDRATE_SINGLE_SCALAR
        // Doctrine\ORM\Query::HYDRATE_SIMPLEOBJECT

        // Hydrate the result as an array to get the requested format
        // When you use array hyrdation doctrine does it according 
        // to your entity graph
        return $query->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY);
    }
}
Run Code Online (Sandbox Code Playgroud)