Несколько таблиц соединения между 2 таблицами с Symfony

Я хотел бы создать несколько отношений между одними и теми же таблицами

Project <--> ProjectManagers <--> Employees
Project <--> ProjectEmployees <--> Employees

У меня уже есть объект Project и Employees.
Как мне сделать связи с аннотациями?

Уже пробовал двунаправленное отношение «многие ко многим». Но доктрина сгенерирует 1 таблицу соединений, но также нужна таблица projects_managers.

<?php
/** @Entity */
class Project
{
// ...

/**
* Many Projects have Many Employees.
* @ManyToMany(targetEntity="Employee", inversedBy="projects")
* @JoinTable(name="projects_employees")
*/
private $employees;

public function __construct() {
$this->employees = new \Doctrine\Common\Collections\ArrayCollection();
}

// ...
}

/** @Entity */
class Employee
{
// ...
/**
* Many Employees have Many Projects.
* @ManyToMany(targetEntity="Project", mappedBy="employees")
*/
private $projects;

public function __construct() {
$this->projects = new \Doctrine\Common\Collections\ArrayCollection();
}

// ...
}

0

Решение

Не могли бы вы создать две таблицы как справочные таблицы, а затем создать отношения? Например, создайте сущность ProjectManagers с полями id, project_id и employee_id. То же самое для ProjectEmployees. Для сущности ProjectManagers вы должны создать один-ко-многим из проектов в ProjectManager. То же самое для сущности Сотрудники. Если вы правильно настроите свои отношения, вы можете сделать что-то вроде этого в вашем контроллере:

$project = $this->getDoctrine()->getRepository( 'AppBundle:Projects' )->findById( $id );
$employees = $project->getProjectManagers()->getEmployees();
0

Другие решения

Насколько я знаю, это невозможно. Я знаю три варианта для вас:

a) Позвольте ProjectManagers и ProjectEmployees расширить базовый класс ProjectMembers и использовать наследование таблиц. (Хорошая статья: https://blog.liip.ch/archive/2012/03/27/table-inheritance-with-doctrine.html)

b) Создайте свойство $ projectManagers и $ projectEmployees в сущности Employees, чтобы отношения были разделены. (Вы можете написать дополнительную функцию в вашей сущности, которая объединит оба массива для вас)

c) Установите однонаправленное отношение «многие ко многим», чтобы сотрудники не знали об обратных сущностях.

Выходные прошли 🙂

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector