【问题标题】:Symfony 2, QueryBuilder, multiple andWhere with same parameterSymfony 2,QueryBuilder,多个和Where具有相同的参数
【发布时间】:2015-01-31 23:41:21
【问题描述】:

我有两个实体 - Lawyer 和 Category。它们与多对多关联有关。假设示例律师有 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.
}    

我怎样才能实现这样的目标?

【问题讨论】:

    标签: php symfony doctrine-orm doctrine-query


    【解决方案1】:

    我想通了:

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      相关资源
      最近更新 更多