首页 > 解决方案 > 如何在复杂情况下创建数据库/实体

问题描述

我有一个 Symfony 4 应用程序,用户可以在上面查看体育赛事并为这些赛事注册自己。我使用 Doctrine 作为 ORM 和 EasyAdminBundle 作为管理面板。

我很难弄清楚如何构建我的实体以及应该如何将事物存储在数据库中。我有 2 个主要实体,Event并且Registration. 我将详细解释这些。

事件

Event存储有关事件的所有详细信息。所有事件都有一些固定属性,例如:

如您所见,每个事件都有一个类型。大多数事件都很简单,不包含其他属性。但是,有一个事件类型,我想为其存储一些附加属性。我会complexEventType从这里开始称这种类型。我将描述我想为这些事件保留什么样的属性:

一个示例complexEventType可能如下所示:

这里出现了一些问题:

登记

用户可以注册活动。他们的注册将保存在一个Registration对象中。注册包含以下属性:

如果 is 的布尔isPublic值,则该事件是公开的,未经身份验证的用户可以注册。在这种情况下,我想保留一些额外的信息:eventtrue

根据 中的eventType属性event,需要保存一些额外的属性。例如,一种事件类型发生在国外。对于这种事件类型,我想知道用户是否想留在酒店(布尔值)以及他/她是否可以睡在共享房间(布尔值)。对于另一种事件类型,不保留任何详细信息。对于complexEventType,我们需要存储用户在哪几天进行的活动,以及每个活动的选择选项(距离)。

我对如何处理这种情况有点不知所措。现在,我创建了一个抽象Registration实体,它是 和 的子PublicRegistrationPrivateRegistrationPublicRegistration保留和 之类的属性firstNamelastName同时PrivateRegistration存储指向User对象的指针。现在,Registration存储所有可能的选项,它们都是可以为空的。这行得通,但它看起来一点也不好看。我宁愿将选项分开。我正在考虑制作一个RegistrationOptionInterface. 然后,对于每种事件类型,我可以创建一个实现此接口并添加选项的类。但是,我不知道如何将其保存到数据库中...

谁能指出我正确的方向?以前有没有人遇到过类似的情况,如果有,您是如何解决的?

标签: symfonydatabase-designdoctrineconceptualeasyadmin

解决方案


推荐阅读