Я пытаюсь связать 3 таблицы друг с другом в symfony.
Я пытаюсь связать фильмы с несколькими жанрами, используя 3 таблицы.
столы: фильмы, movietogenre, жанры
Я пытаюсь связать идентификатор фильма с идентификатором movietogenre в жанре. это то, что у меня есть:
классные фильмы:
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @var ArrayCollection
*
* @ORM\ManyToOne(targetEntity="movietogenre", inversedBy="films")
* @ORM\JoinColumn(name="movie_id", referencedColumnName="movie_id")
*/
private $id;
класс movietogenre
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="movie_id", type="integer")
*
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="films", mappedBy="movietogenre")
*/
private $movieId;
/**
* @var integer
*
* @ORM\Column(name="genre_id", type="integer")
*
*@var ArrayCollection
*
* @ORM\OneToMany(targetEntity="genres", mappedBy="movietogenre")
*/
private $genreId;
класс жанров:
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
* @var ArrayCollection
*
* @ORM\ManyToOne(targetEntity="movietogenre", inversedBy="genres")
* @ORM\JoinColumn(name="genre_id", referencedColumnName="id")
*/
private $id;
веточка:
{% for entity in entities if entity.einddatum|date('Y-m-d') > "now"|date("Y-m-d") %}
<div class="movie-item col-md-12 col-lg-12 col-sm-12 col-xs-12">
<div class="poster col-md-2 col-lg-2 col-sm-2 col-xs-0">
<img class="img-responsive" src="{{ entity.filmposter }}" />
</div>
<div class="info col-md-10 col-lg-10 col-sm-10 col-xs-12">
<a href="{{ path('films_show', { 'id': entity.id }) }}"><h2>{{ entity.titel }}</h2></a>
<p>{{ entity.omschrijving }}</p>
<p class="text-muted">{{ entity.id.genre_id.genre }} | speelduur: {{ entity.speelduur|date("H:i:s") }} </p>
<a href="{{ path('films_show', { 'id': entity.id }) }}"> Meer informatie </a>
</div>
</div>
{% endfor %}
Я знаю, что это, вероятно, очень плохо, поэтому, пожалуйста, поправьте меня.
спасибо,
Класс фильма
class Movie {
/**
* @ManyToMany(targetEntity="Genre", inversedBy="movies")
* @JoinTable(name="movietogenre")
**/
private $genres;
public function __construct() {
$this->genres = new \Doctrine\Common\Collections\ArrayCollection();
}
Класс Жанр:
class Genre {
/**
* @ManyToMany(targetEntity="Movie", mappedBy="genres")
**/
private $movies;
public function __construct() {
$this->movies = new \Doctrine\Common\Collections\ArrayCollection();
}
}
Это допустимая конструкция для отношения ManyToMany. Подробнее об этом читайте здесь: Документация ORM-2 ORM - 5. Сопоставление карт - 5.9. Много-ко-многим, двунаправленный.