2013-06-07 3 views
4

Я хочу создать Doctrine Query: (Doctrine 2.3)Doctrine Query из Mysql

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

Может кто-нибудь помочь мне, что я не являюсь экспертом в Учении Я изучаю!

+2

Что ошибка вы получаете или какое поведение вы видите, когда вы выполняете свой код? – LuigiEdlCarno

+0

Я не получаю данные правильно из-за вывода запроса «OutPut of above». Вы видели (()) латуни, которые создают проблему, я не знаю, как удалить пластину отдельно .. (Plate) AND ((Date) ИЛИ (дата)). – TomPHP

+0

@LuigiEdlCarno вы можете проверить мой обновленный вопрос, а также мои комментарии. – TomPHP

ответ

3

После некоторого поиска и совета многих людей я, наконец, нашел какую-то логику и понял выражение в Доктрине. Ниже я привел все выражение с примером. Код для тестирования.

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

Вы также можете обратиться к приведенной ниже проблеме и решению, которое помогло мне решить вышеупомянутый вопрос мной.

REFMultiple Query in Doctrine with NAND,NOR,NOT,AND Operators