我正试图从我自己的伪ORM转移到使用Propel(因为我以前的代码实际上是Active Record)并且努力寻找解决类的问题的“最佳”方法改变和固定的属性。
这是一个游戏,我在地图上有可以在整个游戏中更改所有者的区域,因此我需要存储游戏ID(可以同时进行多个游戏)和区域表上的当前所有者,但我还需要参考一下这个地区的名称,你是否可以在那里招募,起始所有者等等;所有这些都是针对该地区固定的,不会在游戏中或游戏之间发生变化。
例如,“肯特”地区最初可能由英国人拥有,但可以由法国人拥有,但它总是被称为“肯特”,你总是可以在那里招募,它总是在更大的国家'英格兰的一部分”。
我可以看到的选项是:
这一定是一个标准问题,我为没有正确的搜索条件而道歉,但我现在一直在努力打开和关闭一段时间,并且不能让事情直观地工作!
根据要求澄清我的数据库结构 -
地区表
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'对象,但也许我不应该这样。
答案 0 :(得分:2)
如果要使用多个表,并且要使用Propel(或其他一些Active Record库),则每个表必须有一个类。这几乎是Active Record的定义。数据库中每行一个对象,每个表一个类。