Symfony 2+;原则2:使用日期时间值基于日期字段查找记录
我有一个名为Symfony 2+;原则2:使用日期时间值基于日期字段查找记录,symfony,doctrine-orm,Symfony,Doctrine Orm,我有一个名为Event的实体,其中有一个字段startDate(type=“date”),另一个名为slug(type=“string”)。我创建了一个控制器操作,以基于这些部分获取特定事件。路由器以“Y-m-d”格式传递eventDate,并传递eventSlug。现在,我已经成功地创建了一个DateTime对象,使用$startDate=DateTime::createFromFormat('Y-m-d',$eventDate)。现在如果我发布 $event = $eventRepo->
Event
的实体,其中有一个字段startDate
(type=“date”),另一个名为slug
(type=“string”)。我创建了一个控制器操作,以基于这些部分获取特定事件。路由器以“Y-m-d”格式传递eventDate,并传递eventSlug。现在,我已经成功地创建了一个DateTime对象,使用$startDate=DateTime::createFromFormat('Y-m-d',$eventDate)
。现在如果我发布
$event = $eventRepo->findOneBy(array(
'startDate' => $startDate,
'slug' => $eventSlug,
));
它什么也得不到(
$event
为空)。我是否遗漏了条令文档中的某些内容,或者我是否发现了错误?首先确保实际存在具有给定slug和开始日期的事件。slug
字段是否唯一
无论如何,您可以让Doctrine为您进行参数转换,而无需使用PHPformat
函数:
$repo = $this->getDoctrine()->getRepository('AcmeHelloBundle:Event');
$qb = $repo->createQueryBuilder('e');
$event = $qb
->andwhere($qb->expr()->eq('e.slug', ':slug'))
->andWhere($qb->expr()->eq('e.start_date', ':start_date'))
->setParameter('slug', $eventSlug)
->setParameter('start_date', $startDate)
->getQuery()
->getOneOrNullResult();
或者,使用原则参数转换器:
/**
* @Route("/event/show/{slug}/{start_date}")
* @Method("GET")
* @ParamConverter("event", class="AcmeHelloBundle:Event")
* @Template
*/
public function showAction(Event Event)
{
}
在内部,Doctrine param converter为您执行此操作:它检查请求中的任何参数,并使用slug
和start_date
查找实体 如果我离开startDate部分,只使用slug,它就像魅力一样工作,所以问题肯定出在startDate部分。