簡體   English   中英

Symfony 2,QueryBuilder,多個和具有相同參數的地方

[英]Symfony 2, QueryBuilder, multiple andWhere with same parameter

我有兩個實體 - 律師和類別。 它們與多對多關聯有關。 假設示例律師有3個類別。 我想通過一系列類別來創建搜索律師的功能,並且它應該只返回擁有陣列所有類別的律師。

class Lawyer {
    //...
    /**
     * @ORM\ManyToMany(targetEntity="Dees\KancelariaBundle\Entity\Category")
     * @ORM\JoinTable(name="lawyers_has_categories",
     *      joinColumns={@ORM\JoinColumn(name="lawyer_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}
     * )
     *
     * @var ArrayCollection
     */
    protected $categories = null;   
    //...
}

class Category {
    //...
    /**
     * @ORM\Column(length=255, nullable=true)
     *
     * @var string
     */
    protected $name;    
    //...   
}

public function searchLawyers(array $categories) {
    $queryBuilder = $this->createQueryBuilder('lawyer')
            ->join('lawyer.categories', 'category');

    $queryBuilder->andWhere("category.name = :category1");
    $queryBuilder->setParameter("category1", "First category");     

    $queryBuilder->andWhere("category.name = :category2");
    $queryBuilder->setParameter("category2", "Second category");
    //...       
    //won't work, return null, but lawyer with these categories exists.
}    

我怎樣才能實現這樣的目標?

我想到了:

public function searchLawyers(array $categories) {
    $queryBuilder = $this->createQueryBuilder('lawyer')
        ->join('lawyer.categories', 'category');

        $queryBuilder->andWhere("category.name in (:categories)");
        $queryBuilder->setParameter("categories", $categories);

        $queryBuilder->addGroupBy("lawyer.id");

        $queryBuilder->andHaving("COUNT(DISTINCT category.name) = :count");
        $queryBuilder->setParameter("count", sizeof($categories));

    return $queryBuilder->getQuery()->getResult();
}

暫無
暫無

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

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