我正在开发一个C5页面,需要将各种数据附加到用户帐户。有两种类型的用户,具有不同的数据。一些数据是多维的,因此需要自定义数据库表。我现在的问题是,将所有数据存储在自定义数据库表中还是将用户属性用于一维数据是有意义的。
可能没有一般的答案,但可能有一些优点和缺点?
我经常问自己在Concrete5中存储数据的位置,并且会对其他人如何决定感兴趣...
答案 0 :(得分:3)
呀。由于类似的原因,我肯定会将用户属性存储到您已识别的(可见,可搜索等)。
concrete5是可扩展的,但不是 super 可扩展的;您可以使用属性将数据附加到用户,但不能通过您期望的某些完全自定义的对象/数据库表附加数据,例如,显示在用户个人资料页面上。
通常在c5中(像任何其他框架一样),正确的方式(属性)更难(特别是对于第一个“对象”,但也为每个额外的一个)而不仅仅是创建一个db表并链接到一个用户身份。但是,就像在所有框架中一样,你将获得你甚至没有考虑过的道路上的好处。这是搜索,升级和可能仅在明年接管开发的人员身上发生的事情。
所以,尽管如此,请使用属性。而不仅仅是一维数据。您可以配置属性控制器(以及它后面的数据库模式)来存储您希望的任何数据。查看Address属性。这包含多个字段(尽管它仍然是1D)。我认为有一个开源“多地址”属性,它将1-n地址存储为单个属性。你可以用一个额外的链接表来完成这个,但我最近懒得用c5并通过在“data”字段中转储json_encode()
ed(多维)数组来完成no-mysql。 (在这种情况下,您的属性甚至不需要自己的表 - 它可以使用默认表。)然后,您可以配置编辑界面以及显示值(例如,它只显示每个子列表-object的Name
属性)。同样,您可以配置为搜索目的而编制索引的文本。
你问了利弊。执行此自定义将更快,更直接。扩展属性,特别是创建复杂的东西,并不是非常简单,并且没有很多好的文档。此外,属性编辑UI(在用户仪表板页面上)有点麻烦。是的,您可以在“表格单元格”中“设计”任何您想要的内容,但您仍然只能使用管理单击属性名称,使用单元格内的编辑界面,然后(理想情况下)单击小磁盘图标。 (创建一个javascript对话框可能会解决一些问题。)