在Doctrine中是否可以创建与表作为targetEntity的ManyToMany(单向)关系?
我有以下数据库星座: 通过Doctrine ManyToMany(连接表称为 service2job )连接的作业和服务表,因为作业可以有多个服务且相同服务可以出现在不同的工作中。 现在有一个表员工。员工可以根据工作做一些服务。
这是一个棘手的问题:一个或多个员工可以根据工作在同一服务上工作。 所以我需要另一个连接service2job和employee( emp2ser2job )的连接表,它应该由Doctrine生成。
Doctrine / Symfony 方面: 作业服务在作业类中保存为 ArrayCollection 。服务和作业通过Doctrine ManyToMany(Annotation)连接。
我想在 Employee 类中根据工作和员工完成的服务来保存服务。 但问题是:要做到这一点,我需要将Employee中的ManyToMany关系引用到表service2job,因为我不想创建一个我只需要引用的类Service2Job。
有没有可能在没有创建类(Emp2Ser2Job)的情况下进行映射和作为实体引用?
代码:
// Service
class Service
{
private $id;
}
// Job
...
use Doctrine\ORM\Mapping as ORM;
...
class Job
{
public function __construct()
{
$this->services = new ArrayCollection();
}
/**
* @ORM\ManyToMany(targetEntity="KuMiV\ServicesBundle\Entity\Service")
// table that should be targetEntity in Employee ($services);
* @ORM\JoinTable(name="service2job",
* joinColumns={@ORM\JoinColumn(name="job_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="service_id", referencedColumnName="id")}
* )
**/
private $services;
...
}
// Employee
class Employee
{
public function __construct()
{
$this->services = new ArrayCollection();
}
/**
* @ORM\ManyToMany //how should annotation be here to make a ManyToMany unidirectional to the table service2job?
* @ORM\JoinTable(name="employee2service2job",
* joinColumns={@ORM\JoinColumn(name="employee_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="job_id", referencedColumnName="job_id"), @ORM\JoinColumn(name="service_id", referencedColumnName="service_id")}
* )
**/
private $services;
}
答案 0 :(得分:1)
当一段关系有另一个参考/属性时,它不再是一种关系,为什么?因为如果一个关系需要更多的引用/属性,那么它应该作为模型处理。在你的情况下,你应该遵循@ Talu的建议。
Service
- jobs
Jobs
- services
Service2Job
- jobs
- services
- employees //this converts your relationship in model
Employees
- services2jobs