douyou7072 2013-09-07 03:41
浏览 45
已采纳

doctrine 2查询构建器计算一对多关系

I have the following query:

  $em = $this->getEntityManager();
        $query = $em->createQueryBuilder()->select('shoppingcart')
            ->from("AppMainBundle:ShoppingCart", 'shoppingcart')
            ->innerJoin('shoppingcart.shoppingCartProducts', 'shoppingcartproduct')
            ->innerJoin('shoppingcartproduct.product', 'product')
            ->innerJoin('shoppingcartproduct.productAttribute', 'productattribute')
            ->innerJoin('product.shop', 'shop')
            ;

how do I write a where statement, where I only want to get shoppingcart that has more than one shoppingcartproduct in it? Here's the relationship of shopping cart and shoppingcart product:

class ShoppingCart
{
    /**
     * @var integer $id
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;



    /**
     * @ORM\OneToMany(targetEntity="ShoppingCartProduct", mappedBy="shoppingCart", cascade={"persist","remove"})
     */
    protected $shoppingCartProducts;
}
  • 写回答

1条回答 默认 最新

  • douyi8760 2013-09-07 04:10
    关注

    Try to add following lines

    ->addSelect('COUNT(shoppingcartproduct) as nProducts')
    ->addGroupBy('shoppingcart.id')
    ->having('nProducts > 1')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?