私は Symfony の初心者です (SF5 を使用します)。コメント テーブルがあり、その中には filmId 列があります。この列は、ご想像のとおり、フィルム テーブルのプライマリ ID と型関係があります。今のところ、ID に従ってページ上の映画を取得し、映画の ID に関係なくすべてのコメントを取得します。
/**
* @Route("/user/film/{id}", name="film")
*/
public function film(FilmRepository $repo, CommentRepository $comRepo, EntityManagerInterface $em, Request $req, $id)
{
$film = $repo->find($id);
$comments = $comRepo->findAll();
dump($comments);
return $this->render('film/film.html.twig', [
'controller_name' => 'FilmController',
'film' => $film,
'comments' => $comments
]);
}
$commentsをdump()して、もう少し調べてみます。filmId は PersistentCollection 型であることがわかりました。各映画に固有のコメントを filmId に従って取得したいと思います。
$comments = $comRepo-> findBy($id)でそれらを取得しようとしました(GET で取得した映画の ID が filmId に必要なものであるため)、認識されないフィールドエラーが表示されます。
ドキュメントに従って、次のようなカスタム クエリを作成しようとしました。
//CommentRepository
public function findAllWithFilmId($filmId)
{
$em = $this->getEntityManager();
$query = $em->createQuery(
'SELECT c
FROM App\Entity\Comment c
WHERE c.filmId = :filmId'
)->setParameter('filmId', $filmId);
return $query->getResult();
}
//FilmController
$filmId = $id;
$comments = $this->getDoctrine()
->getRepository(Comment::class)
->findAllWithFilmId($filmId);
しかし、次のエラーが表示されます。
[Semantical Error] line 0, col 67 near 'filmId =: fi': Error: Invalid PathExpression. StateFieldPathExpression または SingleValuedAssociationField が必要です。
どうしたの ?filmId が :fi として定義されるのはいつですか? また、filmId に従って正しいリクエストを作成する方法を教えてください。