Symfony2:如何显示来自不同表格的贵重物品?

时间:2016-06-22 13:59:21

标签: php symfony

我正在尝试在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)
    );
}    

我应该添加什么才能展示类型?哪里?任何建议都会受到欢迎。

2 个答案:

答案 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。其次,如果一部电影应该有不止一种类型,那么你应该进行多对多的关联,因为多部电影可以具有相同的类型。如果一部电影只能有一种类型,那么你必须用流派切换拥有的一面(电影应该有流派(单数),流派应该有电影(复数))