Doctrine DQL条件查询 [英] Doctrine DQL conditional query

查看:120
本文介绍了Doctrine DQL条件查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Doctrine的查询构建器构建动态查询。假设我也想在下列选项中选择一个结束时间(只有输入了一个结束时间)。我如何有条件地添加到语句?

I'm trying to build a dynamic query with Doctrine's query builder. Let's say I'd also like to optionally select an end time in the following (only if one was entered). How would I add this conditionally to the statement?

    $query = $this->getEntityManager()->createQueryBuilder()
        ->select('m')
        ->from($this->getEntityName(), 'm')
        ->where("m.start > '" . date('Y-m-d H:i:s', strtotime($start)) . "'")
        ->getQuery();


推荐答案

我会这样做:

// first, create the query builder
$qb = $this->getEntityManager()->createQueryBuilder()
    ->select('m')
    ->from($this->getEntityName(), 'm')
;

// add the default condition
$conditions = array(
    $qb->expr()->gt('m.start', date('Y-m-d H:i:s', strtotime($start)));
);

// put your condition here
if (isset($end)) {
    $conditions[] = $qb->expr()->lt('m.end', date('Y-m-d H:i:s', strtotime($end)));
}

// convert the conditions to an AND clause
$conditions = call_user_func_array(array($qb, 'andX'), $conditions);

// add the WHERE clause
$qb->where($conditions);

// get the query
$query = $qb->getQuery();

这篇关于Doctrine DQL条件查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆