Задать вопрос

Реализация связи многие ко многим?

Добрый день! Я недавно начал изучать symfony2 и наткнулся на такую проблему:
есть несколько сущностей (для простоты допустим, что у них только одно свойство - имя) - фильм, работник и профессия. Мне необходимо создать связь многие ко многим - "у каждого фильма есть персонал (несколько сотрудников), причем у каждого сотрудника определенная профессия для этого фильма". Для разных фильмов у одного и того-же работника могут быть разные профессии. На чистом mysql я бы сделал дополнительную таблицу с тремя столбцами: movie_id | employe_id | profession_id . А как быть с symfony\doctrine - не знаю.

Заранее спасибо

Сущность фильм:
/**
 * @ORM\Entity
 * @ORM\Table(name="movie")
 */
class Movie
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

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


Сущность работник:
/**
 * @ORM\Entity
 * @ORM\Table(name="employe")
 */
class Employe
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

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


Сущность профессия:
/**
 * @ORM\Entity
 * @ORM\Table(name="Profession")
 */
class Profession
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string",length=100)
     */
    protected $name;
}
  • Вопрос задан
  • 3922 просмотра
Подписаться 5 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Довольно популярная проблема.

Обычно решается введением промежуточной сущности - например EmployeProfession. В данной сущности буду только связи с Employe и Profession, эдакая прокси-сущность. Для упрощения дизайна можно уже орудовать внутри сущности геттерами, отключать при необходимости lazy-подгрузку и т.д. Есть так же и другие варианты, но они не универсальны.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы