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']);

此查询不返回任何内容。原因可能是当我在 mysql 中运行它时DATEDIFF( CURRENT_DATE( ) , u.birth_date ) /365,它返回浮点数,例如 10.29。我需要将其转换为整数进行比较。Mysql 提供了FLOOR功能,但它在 DQL 中不起作用。

请帮我解决这个问题。

4

2 回答 2

0
$query->createQueryBuilder('u')->where(':year - substring(u.birthday,1,4) = :age and ((:month = substring(u.birthday,6,2) and :day >= substring(u.birthday,9,2)) or :month > substring(u.birthday,6,2)) or 
        :year - substring(u.birthday,1,4) - 1 = :age and ((:month = substring(u.birthday,6,2) and :day < substring(u.birthday,9,2)) or :month < substring(u.birthday,6,2))')

        ->setParameter('year', (new \DateTime('now'))->format("Y"))
        ->setParameter('month', (new \DateTime('now'))->format("m"))
        ->setParameter('day', (new \DateTime('now'))->format("d"))
        ->setParameter('age', $age);

日期 Ymd 的格式

于 2017-07-12T05:32:47.890 回答
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 回答