添加对象详细信息 table 以推进

Adding object details table to propel

我正在尝试从我自己的伪 ORM 转移到使用 Propel(因为我以前的代码实际上是 Active Record)并且努力寻找 'best' 方法来解决 class由可变属性和固定属性组成的es。

它适用于我在地图上有区域的游戏,可以在整个游戏过程中更改所有者,所以我需要存储游戏 ID(因为可以同时进行多个游戏)和区域的当前所有者table,但我还需要参考地区名称,是否可以在那里招募,首发所有者等;所有这些在该地区都是固定的,不会在游戏内或游戏之间改变。

例如,区域 'Kent' 最初可能由英国人拥有,但可能被法国人占领,但它始终被称为 'Kent',您可以随时在那里招募,它始终是一部分较大的国家 'England'.

我可以看到的选项是:

  1. 查找 .ini 文件或数据库 table 不受 Propel 控制 并将名称等作为主要区域的字段 table
  2. 在区域 table
  3. 上有一个 'details' table 和一个 'details_id' 作为字段
  4. 使用 'details' 硬编码为每个区域创建一个 class(尽管这对我来说似乎难以维护和错误检查)
  5. 我还没有想到的东西'better'

这一定是一个标准问题,我为没有正确使用搜索词而道歉,但我已经断断续续地努力了一段时间,无法直观地解决问题![​​=13= ]

应要求澄清我的数据库结构-

区域table

id  | game_id | owner | turn_last_conquered | details_id | population
----|---------|-------|---------------------|------------|-----------
1   |  100    |England|    2                |    1       |  10
2   |  101    | France|    3                |    1       |  12

地区详情table

id  | name | port | fortified | starting owner | starting population
----|------|------|-----------|----------------|--------------------
 1  | Kent |  1   |   0       |  England       |  13

区域table中的两个条目都对应不同游戏中的肯特。如果我将属性作为区域 object/table 的一部分,那么如果我想在每个游戏中更改某些内容的名称,我必须更新所有受影响的行,而如果它在单独的 table 然后我只需要更新那个,更改就会传播。我自己的系统使用 Propel 填充了 Region 对象,我试图找到一种方法来拥有 'RegionDetails' 对象,但也许我不应该这样做。

如果你打算使用多个 tables,并且你打算使用 Propel(或其他一些 Active Record 库),你将必须有一个 class 每个 table。这几乎就是 Active Record 的定义。数据库中每行一个对象,每个 table.

一个 class