0

我有一个名为 的实体Event,有一个字段startDate(type="date"),另一个名为slug(type="string")。我创建了一个控制器操作来获取基于这些部分的特定事件。路由器以“Ymd”格式传递 eventDate 和 eventSlug。现在我已经成功创建了一个 DateTime 对象$startDate = DateTime::createFromFormat('Y-m-d', $eventDate)。现在如果我发出

$event = $eventRepo->findOneBy(array(
    'startDate' => $startDate,
    'slug'      => $eventSlug,
));

它什么也得不到($event为NULL)。我是否遗漏了 Doctrine 文档中的某些内容,或者我发现了一个错误?

4

1 回答 1

2

首先确保存在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();

或者,使用 Doctrine 参数转换器:

/**
 * @Route("/event/show/{slug}/{start_date}")
 * @Method("GET")
 * @ParamConverter("event", class="AcmeHelloBundle:Event")
 * @Template
 */
public function showAction(Event Event)
{
}

在内部,Doctrine 参数转换器为您完成:它检查请求中的任何参数并使用 and 查找slug实体start_date

于 2012-07-23T20:09:03.617 回答