1

私は Zend Framework 2 で作業しており、Doctrine Query Language を使用しています。

ユーザー リスト ページに年齢のフィルターを追加する必要があります。データベースには、日付形式を使用してユーザーの生年月日を保存しました。where 条件を使用してフィルターを適用する方法を教えてください。

$repository = $this->entityManager->getRepository('User\Entity\User');
$query = $repository->createQueryBuilder('u');
$query->where("(DATE_DIFF(CURRENT_DATE(), u.birth_date)/365)=".$search_arr['age']);

このクエリは何も返しません。その理由は、mysqlDATEDIFF( CURRENT_DATE( ) , u.birth_date ) /365で実行すると、10.29 などの浮動小数点数で年数が返されるためです。比較するには整数に変換する必要があります。Mysql はFLOOR関数を提供しますが、DQL では機能しません。

それに関して私を助けてください。

4

2 に答える 2

0

次の式は私のためにトリックを行っています:

if (today - 31 <= DOB >= today - 30) i am 30. 

DQL では次のようになります。

$age = intval($data['age']);

$startDate = new \DateTime('now');
$startDate->modify('-'.($age+1).' years');

$endDate = new \DateTime('now');
$endDate->modify('-'.$age.' years');
$from = new \DateTime($startDate->format("Y-m-d H:i:s"));
$to   = new \DateTime($endDate->format("Y-m-d H:i:s"));

$qb = $this->getEntityManager()->createQueryBuilder();

$qb->select('p');
$qb->from('MyBundle:Person', 'p');
$qb->andWhere('p.dateOfBirth BETWEEN :from AND :to');
$qb->setParameter('from', $from);
$qb->setParameter('to', $to);
于 2016-02-27T05:18:04.423 に答える