请求symfony中的链接字段

问题描述 投票:1回答:1

我有一个页面,显示有关电影的信息。我在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看来错误的请求?还是有更好的方法来解决此问题?

这是我的评论实体

<?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

,因为在make:实体期间从symfony开始,我定义了类型关系,稍后在phpmyadmin中更正了该类型关系,但没有代码。例如,我们可以看到filmId在ManyToMany中,但是我认为它应该在OneToOne中(FilmId只能有一个id,而一个id只能对应一个filmId),但是我担心如果我更改某些内容,它< [破坏一切。我有一个页面,显示有关电影的信息。我在GET中恢复了电影的ID。我想做的是检索每部电影的评论(我的表中有一个filmId列链接了...
php mysql symfony doctrine
1个回答
1
投票
如果您已经正确设置了ORM关系,那么应该很简单:
© www.soinside.com 2019 - 2024. All rights reserved.