我正在尝试在Symfony中创建一个网站,其中我有一个带有电影的数据库。这是它的样子:
/**
* Game entity.
*/
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Class Movie.
*
* @ORM\Table(name="movies")
* @ORM\Entity(repositoryClass="AppBundle\Repository\Movie")
*/
class Movie
{
/**
* Id.
*
* @ORM\Id
* @ORM\Column(
* type="integer",
* nullable=false,
* options={
* "unsigned" = true
* }
* )
* @ORM\GeneratedValue(strategy="IDENTITY")
*
* @var integer $id
*/
private $id;
/**
* Title.
*
* @ORM\Column(
* name="title",
* type="string",
* length=255,
* nullable=false
* )
*
* @var string $title
*/
private $title;
/**
* Notes.
*
* @ORM\Column(
* name="notes",
* type="text",
* nullable=true
* )
*
* @var string $notes
*/
private $notes;
/**
* Genres array
*
* @ORM\ManyToOne(targetEntity="Genre")
* @ORM\JoinColumn(name="genre_id", referencedColumnName="id")
* )
*
* @var \Doctrine\Common\Collections\ArrayCollection $genres
*/
protected $genres;
/**
* Constructor.
*/
public function __construct()
{
$this->tags = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id.
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set id.
*
* @param integer $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* Set title.
*
* @param string $title
*/
public function setTitle($title)
{
$this->title = $title;
}
/**
* Get title.
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set notes.
*
* @param string $notes
*/
public function setNotes($notes)
{
$this->notes = $notes;
}
/**
* Get notes.
*
* @return string
*/
public function getNotes()
{
return $this->notes;
}
/**
* Add genres
*
* @param \AppBundle\Entity\Genre $genres
* @return Movie
*/
public function addGenre(\AppBundle\Entity\Genre $genres)
{
$this->genres[] = $genres;
return $this;
}
/**
* Set genres
*
* @param \AppBundle\Entity\Genre $genres
* @return Movie
*/
public function setGenres(\AppBundle\Entity\Genre $genres = null)
{
$this->genres = $genres;
return $this;
}
/**
* Get genres
*
* @return \AppBundle\Entity\Genre
*/
public function getGenres()
{
return $this->genres;
}
}
每部电影都有一个类型:
/**
* Genere entity.
*
*/
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Class Genere.
*
* @ORM\Table(name="genere")
* @ORM\Entity(repositoryClass="AppBundle\Repository\Genere")
*/
class Genere
{
/**
* Id.
*
* @ORM\Id
* @ORM\Column(
* type="integer",
* nullable=false,
* options={
* "unsigned" = true
* }
* )
* @ORM\GeneratedValue(strategy="IDENTITY")
*
* @var integer $id
*/
private $id;
/**
* Name.
*
* @ORM\Column(
* name="name",
* type="string",
* length=128,
* nullable=false
* )
*
* @var string $name
*/
private $name;
/**
* Get Id.
*
* @return integer Result
*/
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
/**
* Set name.
*
* @param string $name Name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* Get name.
*
* @return string Name
*/
public function getName()
{
return $this->name;
}
现在,我的问题是:如何在电影列表中显示一个类型?我知道如何制作电影列表,但不知道如何用来展示类型。 我的MovieController目前看起来像这样:
/**
* List action.
*
* @Route("/movie-list", name="movies-list")
* @Route("/movies-list/")
*
* @throws NotFoundHttpException
* @return Response A Response instance
*/
public function listAction()
{
$movies = $this->findByStatId(2);
if (!$movies) {
throw new NotFoundHttpException('Movies not found!');
}
return $this->templating->renderResponse(
'AppBundle:Movie:index.html.twig',
array('movies' => $movies)
);
}
我应该添加什么才能展示类型?哪里?任何建议都会受到欢迎。
答案 0 :(得分:2)
您已经拥有genres
以及$movies
变量。您只需要像这样调用访问genres
:
{% for genre in movies.genres %}
{# Access each genre variable here #}
{% endfor %}
movies
是传递给twig文件的对象,它具有属性genres
以访问其中的相关类型。
要访问控制器上的流派:
<?php
$genres=$movies->getGenres();
// loop through $genres.
?>
getGenres()
将返回流派集合。
答案 1 :(得分:1)
你的类型课有错误。至少在您的示例中,您将其称为Genere
而不是Genre
。其次,如果一部电影应该有不止一种类型,那么你应该进行多对多的关联,因为多部电影可以具有相同的类型。如果一部电影只能有一种类型,那么你必须用流派切换拥有的一面(电影应该有流派(单数),流派应该有电影(复数))