我正在寻找执行以下查询的方法:
$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; ... }
但是按顺序排序是行不通的。我的结果不会在开始日期之前显示。
我正在寻找从最早到最近发生的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(或CHAR,TEXT等等)。
date_start
DATETIME
VARCHAR
CHAR
TEXT
在这种情况下,结果 是有序的 ,但不是您期望的那样。这是因为数据库对不同类型的排序不同。
Doctrine附带了一个控制台工具,该工具能够验证您的映射并检查数据库是否与它们一致:doctrine orm:validate-schema。
doctrine orm:validate-schema
如果它报告与数据库不一致,则doctrine orm:schema-tool:update --dump- sql用于使其显示将更新数据库所执行的查询(它将假定映射是事实的来源)。
doctrine orm:schema-tool:update --dump- sql