dongwu5318 2012-02-14 12:27
浏览 88
已采纳

Doctrine DQL条件查询

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();
  • 写回答

1条回答 默认 最新

  • douhuo1738 2012-02-16 07:58
    关注

    I'd do something like this:

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

报告相同问题?

悬赏问题

  • ¥15 MATLAB解决问题
  • ¥20 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目