我想在同一张表之间创建多个关系

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 \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();
    }

    // ...
}

最佳答案

您不能将两个表创建为查找表然后创建关系吗?例如,使用字段id,project_id和employee_id创建一个ProjectManagers实体。与ProjectEmployees相同。对于ProjectManagers实体,您将创建从Projects到ProjectManagers的一对多。雇员实体也是如此。如果您正确设置了关系,则可以在控制器中执行以下操作:

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

关于php - Symfony在2个表之间有多个联接表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43004515/

10-12 06:24