我有一个页面,显示有关电影的信息。我在GET中恢复了电影的ID。我想做的是检索每部电影的评论(我的表中有一个filmId列,链接到电影表的主要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->findBy(array('id' => $id));
return $this->render('film/film.html.twig', [
'controller_name' => 'FilmController',
'film' => $film,
'comments' => $comments
]);
}
当我制作$ comments = $ comRepo-> findBy(array('id'=> $ id));时,我会得到一些评论,但基于他们的ID和NOT电影ID (ID为1的评论将显示在ID为1的电影上,但例如ID为4的评论和filmId a 1不会出现在电影1上,而是ID为4的电影上))
我试图通过简单地创建$ comments = $ comRepo-> findBy(array('filmId'=> $ id));
来访问filmId字段,但是我得到了错误:执行'SELECT t0.id AS id_1,t0.content AS content_2,t0.created_at AS created_at_3,t0.author_id AS author_id_4 FROM comment t0 WHERE comment_film.film_id =?时发生异常。带有参数[“ 1”]:SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ comment_film.film_id”
我在我的评论存储库中尝试了个性化请求:
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(); }
但是它似乎不起作用。
我要去哪里提出这样的要求?
如何在不弄乱所有内容的情况下修改from symfony看来错误的请求?还是有更好的方法来解决此问题?这是我的评论实体
,因为在make:实体期间从symfony开始,我定义了类型关系,稍后在phpmyadmin中更正了该类型关系,但没有代码。例如,我们可以看到filmId在ManyToMany中,但是我认为它应该在OneToOne中(FilmId只能有一个id,而一个id只能对应一个filmId),但是我担心如果我更改某些内容,它< [破坏一切。我有一个页面,显示有关电影的信息。我在GET中恢复了电影的ID。我想做的是检索每部电影的评论(我的表中有一个filmId列链接了...<?php namespace App\Entity; use App\Entity\Film; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="App\Repository\CommentRepository") */ class Comment { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="comments") * @ORM\JoinColumn(nullable=false) */ private $author; /** * @ORM\ManyToMany(targetEntity="App\Entity\Film", inversedBy="comments") * @ORM\JoinColumn(nullable=false) */ private $filmId; /** * @ORM\Column(type="text") */ private $content; /** * @ORM\Column(type="datetime") */ private $createdAt; public function getId(): ?int { return $this->id; } public function getAuthor(): ?User { return $this->author; } public function setAuthor(?User $author): self { $this->author = $author; return $this; } public function getFilmId(): ?Film { return $this->filmId; } public function setFilmId(?Film $filmId): self { $this->filmId = $filmId; return $this; } public function getContent(): ?string { return $this->content; } public function setContent(string $content): self { $this->content = $content; return $this; } public function getCreatedAt(): ?\DateTimeInterface { return $this->createdAt; } public function setCreatedAt(\DateTimeInterface $createdAt): self { $this->createdAt = $createdAt; return $this; } }
我认为错误可能来自annotations