我正在尝试使用doctrine
日期格式功能,以便将m-d
中的日期与今天m-d
进行比较,不知道如何处理addWhere
中的转义,这是一个片段:
->andWhere('date("m-d", strtotime('r.dateOfDeath')) = :now')
->setParameter('now',\date("m-d", time()))
答案 0 :(得分:0)
如果您的目标是通过dateOfDeath搜索特定的月/日组合,您可能会发现缺少Doctrine。
在MySQL中你通常会WHERE MONTH(r.dateOfDeath) = MONTH(NOW()) AND DAY(r.dateOfDeath) = DAY(NOW())
为了方便您自己,您可以使用Native MySQL查询,请参阅ex。 Execute raw SQL using Doctrine 2
在Doctrine中,缺少DAY,NOW和MONTH功能。您可以使用参数解决现在的部分。你需要通过像https://github.com/beberlei/DoctrineExtensions
这样的包来实现的DAY和MONTH函数另一种可能的解决方案可能是简单地将dateOfDeath设为字符串并执行->andWhere("r.dateOfDeath LIKE '%:md')->setParameter('md', date('m-d'))
答案 1 :(得分:0)
我使用doctrine扩展解决了这个问题[请参阅]:https://github.com/uvd/Doctrine/tree/master/UVd/DoctrineFunction“UVD Doctrine”
<强> config.yml 强>
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
dql:
datetime_functions:
DATE_FORMAT: AppBundle\Extension\Doctrine\DateFormat
<强>用法强>
注册功能
protected function registerDateFunctions()
{
$emConfig = $this->getEntityManager()->getConfiguration();
$emConfig->addCustomStringFunction('DATE_FORMAT','AppBundle\Extensions\Doctrine\DateFormat');
}
创建查询构建器
public function getAllRecords()
{
$this->registerDateFunctions();
$qb = $this->createQueryBuilder('r')
->select('r')
->addSelect('d')
->addSelect('b.country')
->leftJoin('r.religion', 're')
->leftJoin('r.country_of_birth', 'b')
->leftJoin('r.country_of_death', 'd')
->where('r.status = :status')
->setParameter(':status', 1)
->andWhere("DATE_FORMAT(r.dateOfDeath,'%m-%d') = :now")
->setParameter(':now',\date("m-d", time()))
->getQuery();
return $qb->getArrayResult();
}
信用:“http://www.uvd.co.uk/blog/using-mysqls-date_format-in-doctrine-2-0/”