簡體   English   中英

Symfony2使用查詢生成器來加載特定的ManyToMany對象

[英]Symfony2 using Query builder to load a specific ManyToMany object

我的產品可以有很多類別。 但是,在對象的一部分中,我需要獲取特定的類別。 因此,除了獲取所有類別,然后在for循環中搜索特定類別之外,我只需要獲取此特定類別。 為此,我正在使用查詢生成器。

public function findProduct($id) {
    $qb = $this->createQueryBuilder('p')
        ->addSelect(array('p', 'cat'))  // many to many table
        ->addSelect(array('p', 'category')) // the category entity
        ->leftJoin('p.category', 'cat')
        ->leftJoin('cat.category', 'category')
        ->andWhere("category.id = 15") // error here
        ->SetParameter('id', $id);


    return $qb->getQuery()->getOneOrNullResult();
}

通過此查詢,我可以輕松地執行$ product->getCategory[0] (由於數組為[])並僅獲取我需要的類別(在此示例中,id = 15)

問題:

但是,如果產品沒有具有特定ID的類別。則返回整個產品為null。

所以,如果我這樣做:

 $product = $em->getRepository('MpShopBundle:Product')->findProduct($id); = null

但是它應該是這樣的:

 $product = $em->getRepository('MpShopBundle:Product')->findProduct($id); = object

$product->getCategory() = null

如何在查詢生成器中進行這項工作? 那有可能嗎?

這應該工作。 而不是約束整個查詢(實際上是這樣做的),而是約束聯接)。

leftJoin('cat.category','category','WITH','category.id = 15')

這樣,僅當id == 15時,您才應該始終獲得商品和類別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM