我们的产品也有类似的结构。这就是我们实现它的方式。
/** @MongoDB\Document(collection="companies") */
class Company
{
// Properties
/** @MongoDB\Id */
protected $id;
/** @MongoDB\String */
protected $name;
/** @MongoDB\ReferenceMany(targetDocument="Employee", mappedBy="company", cascade={"remove"}) */
protected $employees;
/** @MongoDB\ReferenceMany(targetDocument="Role", mappedBy="company", cascade={"remove"}) */
protected $roles;
}
/**
* @MongoDB\Document(collection="roles")
* @MongoDB\UniqueIndex(keys={"title"="asc", "company"="asc"})
*/
class Role
{
/** @MongoDB\Id */
protected $id;
/** @MongoDB\String */
protected $title;
/** @MongoDB\String */
protected $description;
/** @MongoDB\ReferenceMany(targetDocument="Employee", mappedBy="role") */
protected $employees;
/** @MongoDB\ReferenceOne(targetDocument="Company", inversedBy="roles") */
protected $company;
}
/**
* @MongoDB\Document
* @MongoDB\DiscriminatorField(fieldName="type")
* @MongoDB\DiscriminatorMap({"person"="Person", "employee"="Employee"})
*/
class Employee extends Person
{
// Properties
/** @MongoDB\String */
protected $employeeId;
/** @MongoDB\ReferenceOne(targetDocument="Role", inversedBy="employees") */
protected $role;
/** @MongoDB\ReferenceOne(targetDocument="Company", inversedBy="roles") */
protected $company;
}
这允许公司内的大量员工具有大量角色。这很方便,因为您可以通过公司参考轻松获取角色/员工列表,而无需将详细信息存储在公司文档中。