教义3路制图

格伦·埃尔金斯(Glen Elkins):

我需要一些帮助来解决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
}
毛利克·帕玛(Maulik Parmar):

这是典型的与边缘数据/关系数据用例的多对多关系。

实际上,您具有关系数据类,其中包含有关其关系的额外元数据,因此它成为一个Entity,您可以像访问任何其他Entity类一样对其进行访问。从图,节点和边的角度来考虑这种关系。您的学生实体和父实体是节点,而它们之间的关系是权重为真/假(即0/1)的边。

对于RDBMS,您可以通过引入3个实体来解决它:

  1. Student
  2. Parent
  3. ParentStudent或者StudentParent更适合和韵律的应用

您现在可以拥有尽可能多的数据用于此关系,也可以将其ID映射到与此关联相关的其他相关数据,因为它现在是实体。

此外,您还具有彼此之间的以下关系,该关系从具有中间实体的OneToMany和与ManyToOne映射相反的一侧开始,最终通过ParentStudentEntity 将两个实体连接为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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章