Doctrine查询从Mysql

4

我想创建一个Doctrine查询:(Doctrine 2.3)

SELECT * FROM `car` WHERE `plate` like '%' AND (`datetime` BETWEEN '2013-03-13 22:20:18' AND '2013-03-13 22:20:20') OR (`datetime` BETWEEN '2013-03-13 15:10:18' AND '2013-03-13 15:10:16')

我尝试了下面这个方法,但是没有生效:
$qry = $this->manager()->createQueryBuilder()
                    ->from($this->entity, 'e')
                    ->select('e');
$qry->where('e.plate like :plate');
$qry->setParameter('plate', $plate);
$qry->andWhere(
        qry->expr()->between(
             'e.datetime',
            ':dateFrom',
            ':dateTo'
         )
        )
    ->setParameter('dateFrom', $fromdate)
    ->setParameter('dateTo', $todate);
    $qry->orWhere(
            $qry->expr()->between(
                'e.datetime',
                ':dateFrom',
                ':dateTo'
             )
            )
    ->setParameter('dateFrom1', $fromdate1)
    ->setParameter('dateTo1', $todate1);

上述查询的输出结果为:
SELECT e FROM user e WHERE (e.plate like :plate AND (e.datetime BETWEEN :dateFrom AND :dateTo)) OR (e.datetime BETWEEN :dateFrom AND :dateTo)

我想检查同一列中的两个日期,应该如何检查?这个语法正确吗? 目前是这样的:

(Plate AND (Date)) OR Date)

案例1

但是为了获得良好的输出效果,应该按照以下方式进行。

(Plate) AND ((Date) OR (Date))

案例2

在其他情况下,应该是这样的:

((Plate) or (Plate)) AND ((Date) OR (Date))

有人能帮我吗?我不是Doctrine的专家,我正在学习中!


2
当您执行代码时,您遇到了什么错误或看到了什么行为? - LuigiEdlCarno
我无法正确获取数据,因为查询输出“上面的输出”存在问题。你看到了 (( )) 括号导致的问题吗?我不知道如何单独删除这个板子...(Plate) AND ((Date) OR (Date))。 - DonOfDen
@LuigiEdlCarno,你能看一下我的更新问题和评论吗? - DonOfDen
1个回答

3

在经过一些搜索和许多人的建议后,我终于找到了一些逻辑,并理解了Doctrine中的表达式。下面我给出了所有的表达式和一个示例。代码需要进行测试。

$ex1    =   $qry->expr()->like('e.user', "'".$user."'");
$ex2    =   $qry->expr()->orX(
                $qry->expr()->between('e.datetime', "'".$datetimefrom."'", "'".$datetimeto."'")
            );
$ex3    =   $qry->expr()->in('e.country', $country);
$final_expression = $qry->expr()->andX($ex1,$ex2,$ex3); 

你可以参考以下问题和解决方案,这些帮助我解决了上面的问题。 REF Doctrine中使用NAND、NOR、NOT、AND运算符的多个查询

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接