Symfony2 и Doctrine ManyToMany Realtionship - PullRequest
       0

Symfony2 и Doctrine ManyToMany Realtionship

4 голосов
/ 10 февраля 2012

Я испытываю головную боль по этому поводу и не могу найти решение.

У меня есть 2 объекта: Movie.php и Category.php

Я хочу, чтобы в одном фильме было несколькоКатегории и наоборот.Вот почему я выбрал отношения ManyToMany.

Теперь мне интересно ... Что происходит на сайте базы данных?Есть ли промежуточная таблица, которая отображает movie_ids на category_ids?Но это не то, что случилось.На самом деле моей первой попыткой было создание объекта MovieCategory - я сопоставил один фильм нескольким категориям с помощью OneToMany, а в объекте MovieCategory я установил соединение OneToOne, чтобы получить имя категории из моего объекта Category.Но я полагаю, что это не так, как должно работать, не так ли?

Вот мой код того, как, по моему мнению, это должно работать, я действительно ценю любую помощь, которую я могу получить в этом:.php

<?php

/**
 * @ORM\Table(name="movies")
 * @ORM\HasLifecycleCallbacks()
 */

class Movie
{

public function __construct()
{
    $this->categories = new ArrayCollection();
}

/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/** @ORM\Column(type="string") */
protected $moviename;

/**
 * @ORM\ManyToMany(targetEntity="Category", mappedBy="movie")
 */
protected $categories;

}

Category.php

<?php

/**
 * @ORM\Table(name="categories")
 * @ORM\HasLifecycleCallbacks()
 */

class Category
{

public function __construct()
{
    $this->movies = new ArrayCollection();
}

/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="string")
*/
protected $name;

// ...

/**
 * @ORM\ManyToMany(targetEntity="Movie", mappedBy="movie", cascade={"persist"})
 */
protected $movies;


}

Ответы [ 2 ]

12 голосов
/ 10 февраля 2012

Согласно Doctrine docs это должно выглядеть так:

// Movie.php
/**
 * @ORM\ManyToMany(targetEntity="Category", inversedBy="movies")
 * @ORM\JoinTable(name="movies_categories")
 */
protected $categories;

// ...

// Category.php
/**
 * @ORM\ManyToMany(targetEntity="Movie", mappedBy="categories")
 */
protected $movies;
0 голосов
/ 10 февраля 2012

Вы используете одно и то же значение для mappedBy в обоих объявлениях. Кроме того, значение, которое вы используете, является единственным, оно должно быть во множественном числе. Это не может работать.

...