gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:06:53 26 4
gpt4 key购买 nike

我要执行以下查询:

        $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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com