Как объединить несколько таблиц в Symfony

1

Я пытаюсь связать 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 %}

Я знаю, что это, вероятно, очень плохо, поэтому, пожалуйста, поправьте меня.

спасибо,

  • 0
    Что именно не работает? Каков результат вашего нынешнего подхода?
Теги:

1 ответ

1
Лучший ответ

Класс фильма

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. Много-ко-многим, двунаправленный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню