我想在同一个表之间创建多个关系
Project <--> ProjectManagers <--> Employees
Project <--> ProjectEmployees <--> Employees
我已经拥有了Project和Employees实体。 如何使用注释建立连接?
已经尝试过多对多,双向关系。但是,doctrine会产生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 :(得分:0)
据我所知,这是不可能的。我知道三种替代方案:
a)让ProjectManagers和ProjectEmployees扩展基类ProjectMembers并使用表继承。 (好文章:https://blog.liip.ch/archive/2012/03/27/table-inheritance-with-doctrine.html)
b)在Employees实体中创建一个属性$ projectManagers和$ projectEmployees,以便关系分离。 (您可以在实体中编写一个为您合并两个数组的附加函数)
c)建立多对多的单向关系,以便Employees不知道反向实体。
去周末: - )
答案 1 :(得分:0)
你不能将这两个表创建为查找表然后创建关系吗?例如,使用字段id,project_id和employee_id创建ProjectManagers实体。 ProjectEmployees也是如此。对于ProjectManagers实体,您将从Projects到ProjectManagers创建一对多。 Employees实体也是如此。如果您正确设置了关系,则可以在控制器中执行以下操作:
$project = $this->getDoctrine()->getRepository( 'AppBundle:Projects' )->findById( $id );
$employees = $project->getProjectManagers()->getEmployees();