我正在从事一个项目并且我已经怀疑了这个问题。 我有一个IS-A关系,看起来像这样:
Users
作为父表,然后Companies, Admins and Customers
作为子表。由于它们都具有不同的属性,我决定创建4个表并将它们链接到Users
表,该表将保存登录信息,这是子项之间的公共信息。
我的奋斗是,如果父母并不存在,我就无法创造一个孩子,但我想让顾客和公司自己注册,所以解决方案我是我们现在正在插入新的user
,然后从users
获取最大ID并插入customer
。但我不确定这是一个好方法,如果有多个人尝试立即注册会怎么样?
我可以控制数据库中的父插入而不是我的代码吗?也许有触发器?
这对我来说更有意义,主要是因为用户本身在我的上下文中没有任何意义,它可以是客户,管理员或公司。
答案 0 :(得分:1)
鉴于,就像你说的那样,用户本身没有任何意义,我认为你的用户类应该是抽象的。这样您就不必创建任何用户,该信息将直接从子实体中的User类继承。
详细编辑:从学说的角度来看,只需在父实体(用户)上使用@ORM\MappedSuperclass
注释即可。你的孩子实体无所事事。这样,每个子实体都将继承父实体的所有属性和方法,在您的情况下,这是我理解您想要做的。我让你阅读关于这一点的学说文档的具体部分:
Doctrine inheritance mapped superclass
希望这有帮助。