从Mysql的教义查询 [英] Doctrine Query from Mysql

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

问题描述

我想创建一个学说查询:(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() - >之间(
'e.datetime',
':dateFrom',
':dateTo'


- > setParameter('dateFrom',$ fromdate)
- > setParameter('dateTo',$ todate);
$ qry-> orWhere(
$ qry-> expr() - >之间(
'e.datetime',
':dateFrom',
':dateTo'


- > setParameter('dateFrom1',$ fromdate1)
- > setParameter('dateTo1',$ todate1);

以上查询的OutPut:

  SELECT e FROM user e WHERE(e.plate like:plate AND(e.datetime BETWEEN:dateFrom AND:dateTo))OR(e.datetime BETWEEN:dateFrom AND:dateTo)

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

 (平板AND(日期))或日期)

案例1



但它应该(/)>

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

案例2



其他案例应该是这样的:

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

有些人可以帮助我,我不是教义的专家我是一个学习者!

解决方案

在很多人的一些搜索和建议之后,我终于找到了一些逻辑,并理解了在Doctrine中的表达。下面我给了所有的表达式一个例子。要测试的代码

  $ ex1 = $ qry-> expr() - > like('e.user','。 $用户 ')。 
$ ex2 = $ qry-> expr() - > orX(
$ qry-> expr() - >之间('e.datetime','$ datetimefrom。 ','$ datetimeto。')
);
$ ex3 = $ qry-> expr() - > in('e.country',$ country);
$ final_expression = $ qry-> expr() - > andX($ ex1,$ ex2,$ ex3);

您还可以参考以下问题和解决方案,帮助我解决上述问题。 / p>

REF 多重查询在原则与NAND,NOR,NOT和AND运算符


I want to create a Doctrine Query: (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')

I tried the following but its not working:

$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);

OutPut of above query:

SELECT e FROM user e WHERE (e.plate like :plate AND (e.datetime BETWEEN :dateFrom AND :dateTo)) OR (e.datetime BETWEEN :dateFrom AND :dateTo)

I want to check two dates in same column how can I check? Is the syntax correct? Currently It is like this:

(Plate AND (Date)) OR Date)

Case 1

But it should come like the following for good output.

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

Case 2

In other case it should come like this:

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

Can some one help me I am not an expert in Doctrine I am a learner!

解决方案

After some search and advice from many individual I finally found some logic and understood the expression in Doctrine. Below I have given all the expression with an example. Code to be tested.

$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); 

You can also refer the below issue and solution which helped me to solve the above Question by me.

REF Multiple Query in Doctrine with NAND,NOR,NOT,AND Operators

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

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