gpt4 book ai didi

symfony - 一张 table 的不同型号

转载 作者:行者123 更新时间:2023-12-02 05:24:17 25 4
gpt4 key购买 nike

是否可以(并推荐)为一张表使用多个模型?

我有多种类型的“人”(老师、学生、员工、公司),我想将它们存储在同一个表中。他们拥有所有共同的个人数据,但还有其他关系(例如学生 -> 公司、教师 -> 房间等)、附加信息(例如公司:公司名称、教师:教育)等等。

如果能获得一些针对此类情况的最佳实践,那就太好了。

最佳答案

其实很简单!你必须像这样创建实体:

 /**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"teacher" = "Teacher"})
*/
class Person
{
/**
* @ORM/Id
**/
private $id;
/**
* @ORM/Column
**/
private $name;
//setters getters and all the stuff
}

在 Teacher.php 文件中:

/**
* @ORM\Table()
* @ORM\Entity()
*/
class Teacher extends Person
{
private $salary;
}

成功的关键是那两个注解:

@ORM\DiscriminatorColumn(name="discr", type="string")
@ORM\DiscriminatorMap({"teacher" = "Teacher"})

首先是告诉 ORM 将使用哪一列来验证此人是否是教师。其次是告诉哪些类正在扩展基本 Person 类,以及在我之前提到的专栏中放什么。当您这样做时,您将有两个表,但在 Teacher 中,您将只有添加到 Teacher 实体的数据 :)

一般来说,在使用 ORM 时,您必须考虑对象抽象级别,而不关心 DB(好吧,这不完全正确,但这是一般的想法):)

关于symfony - 一张 table 的不同型号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13364538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com