我想在同一表之间创建多个关系
Project <--> ProjectManagers <--> Employees
Project <--> ProjectEmployees <--> 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 DoctrineCommonCollectionsArrayCollection();
}
// ...
}
/** @Entity */
class Employee
{
// ...
/**
* Many Employees have Many Projects.
* @ManyToMany(targetEntity="Project", mappedBy="employees")
*/
private $projects;
public function __construct() {
$this->projects = new DoctrineCommonCollectionsArrayCollection();
}
// ...
}
您不能将两个表创建为查找表,然后创建关系吗?例如,创建一个具有字段 id、project_id 和 employee_id 的项目经理实体。项目员工也是如此。对于"项目经理"实体,您将创建从"项目到项目经理"的一对多。员工实体也是如此。如果正确设置了关系,则可以在控制器中执行以下操作:
$project = $this->getDoctrine()->getRepository( 'AppBundle:Projects' )->findById( $id );
$employees = $project->getProjectManagers()->getEmployees();
据我所知,这是不可能的。我知道三种选择:
a( 让项目经理和项目员工扩展基类 ProjectMembers 并使用表继承。(不错的文章:https://blog.liip.ch/archive/2012/03/27/table-inheritance-with-doctrine.html(
b( 在"雇员"实体中$projectManagers和$projectEmployees属性,以便分离关系。(您可以在实体中编写一个额外的函数来合并两个数组(
c( 建立多对多单向关系,使员工不知道反向实体。
周末:-(