Mil*_* M. 6 php sql dql symfony doctrine-orm
我想执行以下查询:
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select( 'e' )
->from( 'Entity\Event', 'e' )
->setMaxResults( $limit )
->setFirstResult( $offset )
->orderBy('e.dateStart', 'ASC');
$events = $qb->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)
哪里
/**
* 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;
...
}
Run Code Online (Sandbox Code Playgroud)
但订单不起作用.我的结果不会按日期开始显示.
我正在寻找从最快到最晚发生的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 );
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑2:似乎移动秩序确实有所作为.我现在没有任何错误.使用orderBy脚本运行正常但是它根本没有按日期时间排序!
在我的结果中,我看不到任何会让我觉得它已根据任何给定的属性订购,最终不是日期时间!
怎么可能?
Datetime字段看起来像DB中的那样:2014-05-24 19:30:00
当我转储从前一个查询出来的查询时,这里是我对datetie字段的看法:
["dateStart"]=> string(8) "DateTime"
Run Code Online (Sandbox Code Playgroud)
这是否意味着它真的是一个学说的字符串,这就是为什么它不按日期时间排序?
谢谢
Jas*_*wer 11
您应该检查数据库中的表结构:
什么类型的列date_start?
它应该是DATETIME(在MySQL中,其他供应商可能会有所不同).
但我怀疑这是某种形式的字符串,如VARCHAR(或CHAR,TEXT等等).
在这种情况下,结果是有序的,但不是按照您期望的方式.这是因为数据库对不同类型的排序方式不同.
Doctrine附带一个控制台工具,可以验证您的映射并检查数据库是否与它们一致:doctrine orm:validate-schema.
如果它报告与数据库的不一致,请使用doctrine orm:schema-tool:update --dump-sql它来显示它将更新数据库所执行的查询(它将假设映射是事实的来源).
小智 6
您的查询将如下:
$qb->select( 'e' )
->from( 'Entity\Event', 'e' )
->orderBy('e.dateStart', 'ASC');
->setFirstResult( $offset )
->setMaxResults(20);
Run Code Online (Sandbox Code Playgroud)
你必须尊重查询构建器参数的顺序,我希望这将有所帮助.