php - 如何在 Doctrine 2 中按日期时间排序?

标签 php sql symfony doctrine-orm dql

我要执行以下查询:

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

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

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

在哪里

/**
 * User
 *
 * @ORM\Table(name="event")
 * @ORM\Entity(repositoryClass="Repositories\EventRepository")
 */
class Event
{
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date_start", type="datetime", precision=0, scale=0, nullable=true, unique=false)
     */
    private $dateStart;

...
}

但是 order by 不起作用。 我的结果未按开始日期显示。

我希望检索从最快到最晚发生的 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 !

这怎么可能?

日期时间字段看起来像数据库中的那个: 2014-05-24 19:30:00

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

 ["dateStart"]=> string(8) "DateTime"

这是否意味着它真的是一个学说字符串,这就是为什么它不按日期时间排序的原因?

谢谢

最佳答案

数据库

你应该检查数据库中的表结构:

date_start 是什么类型的列?
它应该是 DATETIME(在 MySQL 中,其他供应商可能会有所不同)。
但我怀疑它是某种形式的字符串,例如 VARCHAR(或 CHARTEXT 等)。

在这种情况下,结果是有序的,但不是您期望的那样。这是因为数据库对不同类型的排序不同。

命令行工具

Doctrine 带有一个控制台工具,可以验证你的映射并检查数据库是否与它们一致:doctrine orm:validate-schema

如果它报告与数据库不一致,使用 doctrine orm:schema-tool:update --dump-sql 让它显示它将执行以更新数据库的查询(它将假设映射是事实的来源)。

关于php - 如何在 Doctrine 2 中按日期时间排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22997077/

相关文章:

php - CakePHP 3 - 比较密码

Symfony 2 : problem with passwords encryption

javascript - 将参数从 twig 传递到 Angular

Symfony2无需请求即可进行模板化

sql - 从 Oracle SQL*Plus 中执行函数时行为不一致?

php - 如何正确地将数据保存到数据库?

php - dompdf:A4 页面上的白边

php - 使用 log4php 跟踪 php 上的用户事件

java - 即使启用全部级联后,也无法从具有子记录的父表中删除记录

mysql - 在可能有拼写错误的 MySQL 数据库中搜索名称