我有一个名为Event
的实体,其字段为startDate
(type =" date"),另一个名为slug
(type ="字符串&#34)。我已经创建了一个控制器动作来根据这些部分获取特定事件。路由器将eventDate作为格式' Y-m-d'和eventSlug传递。现在我已成功使用$startDate = DateTime::createFromFormat('Y-m-d', $eventDate)
创建了一个DateTime对象。现在,如果我发出
$event = $eventRepo->findOneBy(array(
'startDate' => $startDate,
'slug' => $eventSlug,
));
它什么都没有($event
为NULL)。我是否遗漏了Doctrine文档中的内容,或者我发现了一个错误?
答案 0 :(得分:2)
首先确保实际存在具有给定slug和开始日期的Event
。 slug
是否为唯一字段?
无论如何,你可以让Doctrine为你做param转换,而不使用PHP format
函数:
$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();
或者,使用Doctrine param转换器:
/**
* @Route("/event/show/{slug}/{start_date}")
* @Method("GET")
* @ParamConverter("event", class="AcmeHelloBundle:Event")
* @Template
*/
public function showAction(Event Event)
{
}
在内部,Doctrine param转换器为您完成:它检查请求中的任何参数,并使用slug
和start_date
查找实体。