我有一个场景,其中员工和组织表映射到名为 org_employees
的单独表中。
员工表和组织表添加行没有问题,但我的问题是如何为org_employees
表添加记录。我是否需要为org_employees
表平均值创建一个单独的实体,如果是,ORM 关系是如何发生的。你能指导我吗?
Employee
实体:
<?php
namespace Employee'Entity;
use Doctrine'Common'Collections'ArrayCollection;
use Doctrine'ORM'Mapping as ORM;
use Library'Entity'BaseEntity;
/**
* @ORM'Entity
* @ORM'Table(name="employees")
*/
class Employee extends BaseEntity{
/**
* @ORM'Column(name="employee_code", type="string")
* @var string
*/
protected $empCode;
public function getEmpCode() {
return $this->empCode;
}
public function setEmpCode($empCode) {
$this->empCode = $empCode;
return $this;
}
public function __toString() {
return __CLASS__ . ": [id: {$this->id}, name: {$this->name}]";
}
}
Organization
实体:
<?php
namespace Organization'Entity;
use Doctrine'Common'Collections'ArrayCollection;
use Doctrine'ORM'Mapping as ORM;
use Library'Entity'BaseEntity;
/**
* @ORM'Entity
* @ORM'Table(name="organizations")
*/
class Organization extends BaseEntity{
/**
* @ORM'Column(name="name", type="string")
* @var string
*/
protected $name;
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
public function __toString() {
return __CLASS__ . ": [id: {$this->id}, name: {$this->name}]";
}
}
你可以做两件事。
-
在
Employee
和Organization
之间添加ManyToMany
关系。 -
添加介于两者之间的其他实体
EmployeeOrganization(Link)
。这意味着:Employee
-ManyToOne
-EmployeeOrganization(Link)
-OneToMany
-Organization
此解决方案在原则文档中也提到了:
为什么多对多关联不太常见?因为您经常希望将其他属性与关联相关联,在这种情况下,您需要引入关联类。因此,直接多对多关联消失,取而代之的是 3 个参与类之间的一对多/多对一关联。
当涉及到您的实体定义时,第一个解决方案是最简单的,但它只允许您进行链接,仅此而已。第二种解决方案的优点是可以向联接表添加其他字段(换句话说,属性或实体的属性(。例如,告诉您员工何时添加到组织的字段created_at
。
如果不需要这样的其他属性,您可以使用 ManyToMany
.
关于如何定义这些关系,我想参考文档或其他堆栈溢出问题,那里有足够的信息。