1

我正在写一个 Doctrine 2.3 查询,我面临一些问题:

我反映的 SQL 查询是:

SELECT * 
FROM  `entry` 
WHERE  `plate` LIKE  '%'
AND  `recognition_datetime` BETWEEN '2013-03-13 22:20:18'
AND  '2013-03-13 22:20:20';

我得到了选择行的输出。

我正在尝试的教义:

选项 1:

$qry = $this->manager()->createQueryBuilder()
                    ->from($this->entity, 'e')
                    ->select('e');
$qry->where('e.plate like :plate');
$qry->setParameter('plate', $plate);
$qry->add('where', "e.datetime between '2013-03-13 22:20:18' and '2013-03-13 22:20:20'");
$qry->setMaxResults( $limit );

它只输出第一个 where 条件:

SELECT e FROM Myproject\Domain\result e WHERE e.plate like '%'

选项 2:

$qry = $this->manager()->createQueryBuilder()
                    ->from($this->entity, 'e')
                    ->select('e');
$qry->where('e.plate like :plate');
$qry->setParameter('plate', $plate);
$qry->andWhere('e.datetime BETWEEN :monday AND :sunday')
   ->setParameter('monday', $fromdate->format('Y-m-d H:i:s'))
   ->setParameter('sunday', $todate->format('Y-m-d H:i:s'));

它只打印第二个 where 作为查询。有人可以帮我写多个 where/And/or 条件吗?

4

1 回答 1

4

经过一些研究,我发现很少有东西可以解决我的问题:

查询生成:

//CREATING QUERY BUILDER
$qry = $this->manager()->createQueryBuilder()
        ->from('YOUR_ENTITY_HERE', 'e')
        ->select('e');

//LIKE 
$ex1 = $qry->expr()->like('e.user', "'".$user."'");

//BETWEEN 
$ex2 = $qry->expr()->between('e.datetime',"'".$datetime."'","'".$dateto."'");

//IN 
$ex3 = $qry->expr()->in('e.country', $country);


//ADDING ALL EXPRESSION TO ONE INBETWEEN EXPRESSION "AND" OPERATION
$Query = $qry->expr()->andX($ex1,$ex2,$ex3);

//ADDING ALL EXPRESSION TO ONE INBETWEEN EXPRESSION "OR" OPERATION
$Query = $qry->expr()->orX($ex1,$ex2,$ex3);

//ADDING TOTAL EXPRESSIONS TO WHERE
$qry->where($Query); 

//GENERATE QUERY
$qry->getQuery();

//FINAL OPERATIONS
//EXECUTE
$qry->execute();

//GET ARRAY OUT PUT
$qry->getArrayResult();

//GET DB OBJECT
$qry->getResult();

提供 IN 操作的其他方法:

其他使用方式:

$country=array('Us','UK','IND','BE');

$exp = $this->manager()->getExpressionBuilder();
$qry = $this->manager()->createQueryBuilder()
        ->select('e')
        ->from('YOUR_ENTITY_HERE', 'e')
        ->add('where', $exp->in('e.country', $country));
于 2013-06-25T08:29:50.200 回答