我有一个Symfony 4应用程序,用户可以在该应用程序上查看体育赛事并为这些赛事注册自己。我将Doctrine用作ORM,并将EasyDocBundle用作管理面板。
我很难弄清楚如何构造我的实体以及应该如何将其存储在数据库中。我有2个主要实体,Event
和Registration
。我将详细解释这些。
Event
存储有关事件的所有详细信息。所有事件都有一些固定的属性,例如:
id
title
description
startDate
endDate
(可选)isPublic
eventType
如您所见,每个事件都有一个类型。大多数事件很简单,并且不包含其他属性。但是,有一个事件类型,我想为其存储一些其他属性。从现在开始,我将这种类型称为complexEventType
。我将描述我想为这些事件保留什么样的属性:
示例complexEventType
可能如下所示:
这里出现一些问题:
type
属性吗?options
并使其为可空值,而不需要为没有选项的事件设置它吗?用户可以注册事件。他们的注册将保存在Registration
对象中。注册包含以下属性:
id
event
(对事件对象的引用)user
(参考注册用户)如果来自{{1}的isPublic
布尔值是event
,则该事件是公开的,未经身份验证的用户可以为其注册。在这种情况下,我想保留一些其他信息:
true
firstName
lastName
取决于email
中的eventType
属性,需要保存一些额外的属性。例如,一种事件类型发生在外国。对于此事件类型,我想知道用户是否要留在旅馆(布尔型),以及如果他/她在共用房间睡觉(布尔型)是否可以。对于其他事件类型,不保留任何详细信息。对于event
,我们需要存储用户在哪一天进行的活动以及每个活动(距离)的选择选项。
我对应该如何处理这种情况感到困惑。现在,我创建了一个抽象的complexEventType
实体,该实体由Registration
和PublicRegistration
子类化。 PrivateRegistration
保留PublicRegistration
和firstName
之类的属性,而lastName
存储指向PrivateRegistration
对象的指针。目前,User
存储所有可能为空的所有选项。这可行,但看起来一点也不好。我宁愿将选项分开。我当时正在考虑制作一个Registration
。然后,对于每种事件类型,我可以创建一个实现此接口并添加选项的类。但是,我不知道如何将其保存到数据库...
有人能指出我正确的方向吗?以前有人遇到过类似情况吗?如果是,您如何解决呢?