【问题标题】:ignore where statement if parameter is null in doctrine如果参数在学说中为空,则忽略 where 语句
【发布时间】:2014-07-24 14:41:57
【问题描述】:

您好,我在 Doctrine 的 QueryByilder 中遇到问题。我写了一个有 2 个参数的查询,它们影响 where 语句。如果相关参数为空,我想忽略 where 语句。例如,如果 $play = 3 和 $theater = null 查询必须返回所有带有 play 3 和任何剧院的门票 这是我的代码:

public function getAllSearchedTickets($play,$teater){
    return $this->getEntityManager()->createQuery('
        select s from mtadminBundle:ReserveLocation s
        join s.reserve a
        join a.sance b
        where a.acceptCode != 0
        and b.play = :play 
        and b.teater = :teater')
        ->setParameters(array('play'=>$play,'teater'=>$teater))->getResult();
}

谢谢。

【问题讨论】:

    标签: sql symfony doctrine


    【解决方案1】:

    您应该为此使用 QueryBuilder,以更有效地完成它,我将向您展示您的做法,然后以 QueryBuilder 为例:

    你的:

    public function getAllSearchedTickets($play,$teater){
        $query = 'select s from mtadminBundle:ReserveLocation s'.
            'join s.reserve a'.
            'join a.sance b'.
            'where a.acceptCode != 0');
    
        $paramArray = array();
        if( $play ) {
            $query .= ' and b.play = :play';
            $paramArray['play'] = $play;
        }
        if( $teater ) {
            $query .= ' and b.teater = :teater';
            $paramArray['teater '] = $teater;
        }
    
        return $this->getEntityManager()->createQuery($query)
            ->setParameters($paramArray)->getResult();
    }
    

    查询生成器:

    public function getAllSearchedTickets($play,$teater){
        $queryBuilder = $this->getEntityManager()->createQueryBuilder();
        $queryBuilder->select('s')
            ->from('mtadminBundle:ReserveLocation', 's')
            ->join('s.reserve', 'a')
            ->join('a.sance', 'b')
            ->where('a.acceptCode != 0');
    
        if( $play ) {
            $queryBuilder->andWhere('b.play = :play');
            $queryBuilder->setParameter('play', $play);
        }
        if( $teater ) {
            $queryBuilder->andWhere('b.teater = :teater');
            $queryBuilder->setParameter('teater', $teater);
        }
    
        return $queryBuilder->getResult();
    }
    

    【讨论】:

    • 是的!我在 QueryBuilder 模型中的 getResult() 之前添加了 getQuery(),非常感谢老兄:)
    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2018-12-23
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    相关资源
    最近更新 更多