Как заказывать DateTime в Доктрине 2?

Я хочу выполнить следующий запрос:

$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 ); и  $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, НО НЕ ЗАКАЗЫВАЕТСЯ по дате времени!

В моих результатах я не вижу ничего, что заставило бы меня подумать, что оно было заказано на основе какого-либо свойства, окончательно не в день!

Как это возможно?

Поле Datetime выглядит примерно так в DB: 2014-05-24 19:30:00

Когда я var Dump запрашивает запросы, которые возникают из предыдущего запроса, вот что у меня для поля datetie:

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

Означает ли это, что это действительно строка для доктрины, и поэтому она не сортируется по дате?

благодаря

Solutions Collecting From Web of "Как заказывать DateTime в Доктрине 2?"

База данных

Вы должны проверить структуру таблицы в базе данных :

Какой тип столбца date_start ?
Это должно быть DATETIME (в MySQL другие поставщики могут отличаться).
Но я подозреваю, что это какая-то форма строки, например VARCHAR (или CHAR , TEXT и т. Д.).

Когда это так, результат упорядочен , но не так, как вы ожидаете. Это связано с тем, что различные типы упорядочиваются по-разному с помощью базы данных.

Инструмент CLI

Doctrine поставляется с консольным инструментом, который способен проверять ваши сопоставления и проверять, совместима ли с ними база данных: doctrine orm:validate-schema .

Если он сообщает о несоответствиях с базой данных, используйте doctrine orm:schema-tool:update --dump-sql чтобы отобразить запросы, которые он будет выполнять для обновления базы данных (предполагается, что сопоставления являются источником правды).

ваш запрос будет выглядеть так:

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

вы должны уважать порядок параметров построителя запросов, я надеюсь, что это поможет.

Не могли бы вы дать мне результат:

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

Один из возможных вариантов: хорошо ли объявлен ваш геттер для свойства $ dateStart? Должен быть:

 public function getDateStart() { return $this->dateStart; } 

Возможно, вы можете переписать свой код следующим образом

  $qb = $this->getEntityManager()->createQueryBuilder(); $qb->select( 'e' ) ->from( 'Entity\Event', 'e' ) ->setMaxResults( $limit ) ->setFirstResult( $offset ) ->orderBy('date(e.dateStart) ASC');//this is the trick that works for me $events = $qb->getQuery()->getResult();