0

というエンティティがありEvent、フィールドstartDate(type="date") と別のエンティティslug(type="string") があります。これらのパーツに基づいて特定のイベントを取得するコントローラー アクションを作成しました。ルーターは、eventDate を「Ymd」形式で渡し、eventSlug を渡します。これで、DateTime オブジェクトを正常に作成できました$startDate = DateTime::createFromFormat('Y-m-d', $eventDate)。今私が発行した場合

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

何も取得しません ( $eventNULL です)。Doctrine のドキュメントに何か見落としがありますか? それともバグを見つけましたか?

4

1 に答える 1

2

Event最初に、指定されたスラッグと開始日を持つが実際に存在することを確認します。slugユニークなフィールドですか?

formatとにかく、PHP関数を使用せずに、Doctrine にパラメーター変換を行わせることができます。

$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 param コンバーターがそれを行います: リクエスト内のパラメーターをチェックし、 and を使用してエンティティを見つけslugますstart_date

于 2012-07-23T20:09:03.617 に答える