Php 在原则2中如何按日期时间订购?

Php 在原则2中如何按日期时间订购?,php,sql,symfony,doctrine-orm,dql,Php,Sql,Symfony,Doctrine Orm,Dql,我希望执行以下查询: $qb = $this->getEntityManager()->createQueryBuilder(); $qb->select( 'e' ) ->from( 'Entity\Event', 'e' ) ->setMaxResults( $limit ) ->setFirstResult( $offset )

我希望执行以下查询:

        $qb = $this->getEntityManager()->createQueryBuilder();

        $qb->select( 'e' )
            ->from( 'Entity\Event',  'e' )
            ->setMaxResults( $limit )
            ->setFirstResult( $offset )
            ->orderBy('e.dateStart', 'ASC');

        $events = $qb->getQuery()->getResult();
在哪里

但是“订购方式”不起作用。 我的结果不会按开始日期显示

我正在寻找从最早到最晚发生的20个最初事件

我该怎么做

谢谢

编辑:

按照前面的答案,我正在更新我的查询。 不幸的是,我仍然不能让它工作。 请帮忙

     $qb->select( 'e' )
        ->from( 'Entity\Event',  'e' )
        ->Where( 
            $qb->expr()->andX(
                $qb->expr()->between('e.dateStart', ':from', ':to')
            )
        )
        ->orderBy('e.dateStart', 'ASC')
        ->setFirstResult( $offset )
        ->setMaxResults( $limit );
谢谢

编辑2: 看来移动orderBy确实起了作用。到目前为止,我没有任何错误。脚本在orderBy中运行良好,但它根本不是按datetime排序的

在我的结果中,我看不到任何东西会让我认为它是基于任何给定属性订购的,当然不是datetime

这怎么可能

Datetime字段与数据库中的类似: 2014-05-2419:30:00

当我转储来自上一个查询的查询时,这里是我对datetie字段的内容:

 ["dateStart"]=> string(8) "DateTime"
这是否意味着它实际上是一个理论的字符串,这就是为什么它不按日期时间排序


谢谢

您的查询如下:

    $qb->select( 'e' )
        ->from( 'Entity\Event',  'e' )
        ->orderBy('e.dateStart', 'ASC');
        ->setFirstResult( $offset )
        ->setMaxResults(20);

您必须尊重查询生成器参数的顺序,我希望这会有所帮助。

您能告诉我以下结果吗:

$qb->select( 'e' )
    ->from( 'Entity\Event',  'e' )
    ->setMaxResults( $limit )
    ->setFirstResult( $offset )
    ->orderBy('e.dateStart', 'ASC');

die($qb->getQuery()->getSql());
一种可能的想法: 属性$dateStart的getter声明是否正确?应该是:

public function getDateStart()
{
    return $this->dateStart;
}
    $events = $qb->select( 'e' )
        ->from( 'Entity\Event',  'e' )
        ->orderBy('e.dateStart', 'DESC')
        ->setFirstResult( $offset )
        ->setMaxResults( $limit )
        ->getQuery()
        ->getResult();
数据库 您应该检查数据库中的表结构:

什么类型的列是
date\u start

它应该是
DATETIME
(在MySQL中,其他供应商可能会有所不同)。
但我怀疑它是某种形式的字符串,比如
VARCHAR
(或者
CHAR
TEXT
,等等)

在这种情况下,结果是有序的,但不是按照您预期的方式。这是因为数据库对不同类型的排序不同

CLI工具 Doctrine附带了一个控制台工具,可以验证映射并检查数据库是否与映射一致:
Doctrine orm:validate schema


如果它报告与数据库不一致,请使用
orm:schema工具:update--dump sql
让它显示更新数据库时将执行的查询(它将假定映射是真实性的来源)。

也许您可以像这样重写代码

 $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->select( 'e' )
        ->from( 'Entity\Event',  'e' )
        ->setMaxResults( $limit )
        ->setFirstResult( $offset )
        ->orderBy('date(e.dateStart) ASC');//this is the trick that works for me

    $events = $qb->getQuery()->getResult();

查询参数的顺序很重要。在您的情况下,查询应该是:

public function getDateStart()
{
    return $this->dateStart;
}
    $events = $qb->select( 'e' )
        ->from( 'Entity\Event',  'e' )
        ->orderBy('e.dateStart', 'DESC')
        ->setFirstResult( $offset )
        ->setMaxResults( $limit )
        ->getQuery()
        ->getResult();

不完全确定你所说的“从最早到最晚发生的20件第一件事”是什么意思,但你应该给出最新的一组事件。若要更改顺序,请将“DESC”更改为“ASC”。

precision=0,scale=0,当字段类型为datetime时是否需要它们?奇怪。。删除这两个数字类型,然后重试。。如果我错了,请纠正我。你是对的,它只适用于十进制:)我仍然无法让它工作:(关于$qb->add('orderBy',p.created DESC')的任何帮助;这是准确的查询吗?如果是这样:你不需要
andX()
因为您只有一个表达式。如果没有,请向我们显示确切的查询。我们需要知道是否存在连接子句,或者您是否使用了原则分页器等。谁不知道有一个特定的顺序,我在哪里可以了解正确的顺序?我已经查看了D2文档很多次,但从未看到过这一点经过几次测试后,它实际上不起作用。我已经更新了我的答案,以粘贴我的实际查询。-本文对您很有用。请参阅第13.2.5点。您谈论的expr参数是@TahaMetal?方法调用的顺序在这里不算。getter与DQL无关。哪些getter?当我回显SQL时会发生这种情况:
选择e0.id作为id0,e0.name作为name1,e0.description作为description2,e0.link作为link3,e0.social.media作为social.media作为link4,e0.booking.link作为booking.link5,e0.price作为price,e0.currency作为currency7,e0.picture作为picture8,e0.date作为创建日期,e0.date作为开始日期,e0作为开始日期,e0.date作为结束日期人口数量为12,e0.确认为已确认13,e0.用户id为用户id14,e0.管理员id为管理员id15,e0.地点id为地点id16,从事件e0.订单到e0.日期开始ASC限制200偏移量0谢谢Jasper。这是我对这个字段的注释。它是DATETIME。
/***@var\DATETIME**@ORM\Column(name=“date\u start”,type=“DATETIME”,nullable=true,unique=false)*/private$dateStart;
@Miles M。我说的不是映射元数据(注释),而是实际的数据库。(不是条令执行查询,因此对结果排序,它只是生成查询。是数据库执行查询。)对我来说失败:我得到
[语法错误]第0行,第191列:错误:预期已知函数,得到'date'
(条令2.8.x)。