dongtang8678 2014-12-03 11:58
浏览 64
已采纳

Symfony 2,QueryBuilder,多个和具有相同参数的地方

I have two entities - Lawyer and Category. They are connected with Many to Many association. Assume that example lawyer has 3 categories. I want to create function to search lawyers by a array of categories, and it should return only lawyers who have all categories from array.

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.
}    

How can I achieve something like that?

  • 写回答

1条回答 默认 最新

  • duanri1985 2014-12-04 15:21
    关注

    I figured it out:

    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();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥20 基于python进行多背包问题的多值编码
    • ¥15 相同型号电脑与配置,发现主板有一台貌似缺少了好多元器件似的,会影响稳定性和使用寿命吗?
    • ¥15 要求编写稀疏矩阵A的转置矩阵的算法
    • ¥15 编写满足以下要求的停车场管理程序,设停车场只有一个可停放n辆车的狭窄通道且只有一个大门可供车辆进出。
    • ¥15 C语言:数据子序列基础版
    • ¥20 powerbulider 导入excel文件,显示不完整
    • ¥15 用keil调试程序保证结果进行led相关闪烁
    • ¥15 paddle训练自己的数据loss降不下去
    • ¥20 用matlab的pdetool解决以下三个问题
    • ¥15 单个福来轮的平衡与侧向滑动是如何做到的?