How to get partial result from doctrine query builder

后端 未结 2 1510
太阳男子
太阳男子 2021-01-06 22:41

I have a product entity in which it has an array as attributes:

     /**
     * @ORM\\OneToMany(targetEntity=\"Shopious\\MainBundle\\Entity\\ProductPicture\"         


        
相关标签:
2条回答
  • 2021-01-06 23:02

    Add a custom repository method with the DQL for your entity, then call it from the controller

    You can name the repository method whatever you want, for this example I'm using findProductWithPicture

    class ProductRepository extends EntityRepository
    {
        /**
         * @param integer $id
         */
        public function findProductWithPicture($id)
        {
            $dql = <<<SQL
    SELECT
        p.id    id,
        p.name  name,
        q       picture
    FROM
        Shopious\MainBundle\Entity\ProductPicture q,
        Shopious\MainBundle\Entity\Product p
    WHERE
        p.id        = :picture_id  AND
        q.product   = p.id
    SQL;
    
            $query = $this->_em->createQuery($dql)->setParameter('picture_id', $id);
    
            return $query->setMaxResults(1)->getResult();
        }
    }
    

    To use this from the controller

    $em = $this->getDoctrine()->getManager();
    $product = $em->getRepository('ShopiousMainBundle:Product')->findProductWithPicture($id);
    
    return $this->render('ShopiousMainBundle:Product:show.html.twig', array(
        'product' => $product[0]
    ));
    

    In the rendered Twig template, you can access them like so

    <p>{{ product.id }}
    <p>{{ product.name }}
    <p>{{ product.picture.whatever_property }}
    
    0 讨论(0)
  • 2021-01-06 23:06

    Try something like this, if it's a one to many, the normal mySQL behaviour is returning several records with redundant product data, if the same case happens here, then only returning the first record should do the trick.

    PS: assuming the ProductPicture entity has a url property that you want to get

    $query = $em->createQueryBuilder()->select('p.id, p.name, pictures.url')
                ->from("SiteMainBundle:Product", 'p')
                ->innerJoin('p.category', 'c')
                ->innerJoin('p.shop', 'shop')
                ->innerJoin('p.pictures', 'pictures')
                ;
    
    0 讨论(0)
提交回复
热议问题