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

时间:2017-06-18 08:18:08

标签: php mysql propel

我正试图从我自己的伪ORM转移到使用Propel(因为我以前的代码实际上是Active Record)并且努力寻找解决类的问题的“最佳”方法改变和固定的属性。

这是一个游戏,我在地图上有可以在整个游戏中更改所有者的区域,因此我需要存储游戏ID(可以同时进行多个游戏)和区域表上的当前所有者,但我还需要参考一下这个地区的名称,你是否可以在那里招募,起始所有者等等;所有这些都是针对该地区固定的,不会在游戏中或游戏之间发生变化。

例如,“肯特”地区最初可能由英国人拥有,但可以由法国人拥有,但它总是被称为“肯特”,你总是可以在那里招募,它总是在更大的国家'英格兰的一部分”。

我可以看到的选项是:

  1. 具有不受Propel控制的查找.ini文件或数据库表 并且只是将名称等作为主要地区表上的字段
  2. 将“详情”表格和“details_id”作为区域表中的字段
  3. 为每个区域创建一个类,其中“详细信息”是硬编码的(虽然这似乎很难维护并且对我进行错误检查)
  4. 我还没有“更好”的东西
  5. 这一定是一个标准问题,我为没有正确的搜索条件而道歉,但我现在一直在努力打开和关闭一段时间,并且不能让事情直观地工作!

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

    地区表

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

    地区详细信息表

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

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

1 个答案:

答案 0 :(得分:2)

如果要使用多个表,并且要使用Propel(或其他一些Active Record库),则每个表必须有一个类。这几乎是Active Record的定义。数据库中每行一个对象,每个表一个类。