【发布时间】:2014-04-10 19:17:29
【问题描述】:
我正在寻找执行以下查询:
$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 字段与 DB 中的内容类似: 2014-05-24 19:30:00
当我 var Dump 来自上一个查询的查询时,这里是我对 datetie 字段的内容:
["dateStart"]=> string(8) "DateTime"
这是否意味着它真的是一个教义字符串,这就是它不按日期时间排序的原因?
谢谢
【问题讨论】:
-
precision=0, scale=0,当字段类型为 datetime 时是否需要它们?奇怪..删除这两个,因为它们是数字类型,然后尝试..如果我错了,请纠正我。
-
你是对的,它只用于十进制:)
-
我仍然无法让它工作:(对此有任何帮助
-
$qb->add('orderBy', 'p.created DESC');
-
这是 exact 查询吗?如果是这样:您不需要
andX()那里,因为您只有 1 个表达式。如果没有,向我们展示确切的查询。我们需要知道是否有诸如 JOIN 子句之类的东西,或者您是否正在使用 Doctrine Paginator 等...
标签: php sql symfony doctrine-orm dql