【问题标题】:Doctrine Datetime and where condition教义日期时间和条件
【发布时间】:2013-06-03 10:14:27
【问题描述】:

我正在编写一个 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 条件吗?

【问题讨论】:

    标签: zend-framework doctrine-orm doctrine doctrine-1.2 doctrine-query


    【解决方案1】:

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

    查询生成:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 2018-03-15
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      相关资源
      最近更新 更多