У меня есть страница, которая отображает информацию о MOV ie. Я возвращаюсь в GET id фильма. Я хотел бы получить комментарии для каждого фильма (в моей таблице есть столбец filmId, связанный с основным идентификатором таблицы фильмов)
/**
* @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
]);
}
, когда я делаю комментарии $ = $ comRepo-> findBy (array ('id' => $ id)); Я получаю некоторые комментарии, но на основе их идентификатора и NOT идентификатора фильма (комментарий с идентификатором 1 будет будет отображаться в фильме с идентификатором 1, но, например, комментарий с идентификатором 4 и filmId a 1 не будет отображаться в фильме 1, но в фильме с идентификатором 4)
Я попытался получить доступ к полю filmId просто сделав $ comments = $ comRepo-> findBy (array ('filmId' => $ id)); , но я получаю ошибку:
An возникла исключительная ситуация при выполнении 'SELECT t0.id AS id_1, t0.content AS content_2, t0.created_at AS созданный_at_3, t0.author_id AS author_id_4 ОТ комментария t0 ГДЕ comment_film.film_id =?' с параметрами ["1"]: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'comment_film.film_id' в 'предложении where'
Я попытался выполнить персонализированный запрос с, в мой репозиторий комментариев:
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();
}
Но, похоже, он не работает ..
Где мне go сделать такой запрос? Как сделать изменить запрос, который кажется ошибочным, из symfony без дезорганизации всего? или есть лучший способ исправить проблему?
Это мой комментарий сущности
<?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;
}
}
Я думаю, возможно, что ошибка происходит от аннотаций , потому что начиная с symfony во время make: entity, я определял отношения типов, которые позже исправил в phpmyadmin, но не код. Например, мы можем видеть, что filmId находится во ManyToMany, но я думаю, что он должен быть в OneToOne (FilmId может иметь только один идентификатор, а идентификатор может соответствовать только одному filmId), но я боюсь, что если я изменю определенные вещи, то это ломает все .