我需要一些帮助来解决3向映射问题。
我有一个实体学生和一个实体父母,很显然一个父母可以有很多学生,反之亦然,但是我需要每位父母和学生之间的其他信息,每个人的信息都不同。
也许我们有以下数据:
学生A-父母A(无责任),父母B(有责任)-即使一位父母负有法律责任,另一位父母不负法律责任,但他们都是同一学生的父母。
学生B-父母A(负有责任),父母B(负有责任)-在这种情况下,另一个学生具有相同的父母,但是这次他们都有法律责任。
要启动基本实体,我将需要:
class Student
{
// normally would have a ManyToMany here to link parents, but i need the 3rd entity
// to hold whether this student's parent has legal responsibility or not
}
class Parent
{
// normally again would have ManyToMany here to link students to the parent
}
class ParentStudent
{
/**
* @var boolean
* @ORM\Column(type="boolean", options={"default":true})
*/
private $responsibility = true;
// it's this part where i link student to parent and vice versa that's becoming confusing
}
这是典型的与边缘数据/关系数据用例的多对多关系。
实际上,您具有关系数据类,其中包含有关其关系的额外元数据,因此它成为一个Entity,您可以像访问任何其他Entity类一样对其进行访问。从图,节点和边的角度来考虑这种关系。您的学生实体和父实体是节点,而它们之间的关系是权重为真/假(即0/1)的边。
对于RDBMS,您可以通过引入3个实体来解决它:
Student
Parent
ParentStudent
或者StudentParent
更适合和韵律的应用您现在可以拥有尽可能多的数据用于此关系,也可以将其ID映射到与此关联相关的其他相关数据,因为它现在是实体。
此外,您还具有彼此之间的以下关系,该关系从具有中间实体的OneToMany和与ManyToOne映射相反的一侧开始,最终通过ParentStudent
Entity 将两个实体连接为ManyToMany :
<?php
/*
* @ORM\Entity()
*/
class Student {
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ParentStudent", mappedBy="student", orphanRemoval=true)
*/
private $parentStudent;
}
/*
* @ORM\Entity()
*/
class Parent {
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ParentStudent", mappedBy="parent", orphanRemoval=true)
*/
private $parentStudent;
}
/*
* @ORM\Entity()
*/
class ParentStudent {
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Parent", inversedBy="parentStudent")
* @ORM\JoinColumn(nullable=false)
*/
private $parent;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Student", inversedBy="parentStudent")
* @ORM\JoinColumn(nullable=false)
*/
private $student;
/**
* @var boolean
* @ORM\Column(type="boolean", options={"default":true})
*/
private $responsibility = true;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句