我无法弄清楚如何构建它。这是我的应用程序:
这是一个游戏网站...说游戏是“单词搜索”,“sodoku”和“填字游戏”。
每个游戏都有很多难题。所以有大约100个不同的单词搜索,100个左右不同的sodokus等。
每个游戏也有很多模式。因此,每种单词搜索有5种左右的方法(定时,不定时等),5种方式可以玩数独游戏等。
每个游戏模式拼图组合都有很多高分。因此,如果你定时播放wordsearch#3,则会出现某个高分榜。如果您播放相同的拼图未定时,则会出现不同的高分榜,如果您玩#4定时,则会出现第三个高分榜等。
最后,每个高分都有一个用户。
我最初制作它的方式是每个游戏都有很多谜题和模式,每个谜题都有很多高分,每个高分都有一个用户。正如你可能看到的那样,这没有多大意义,因为为什么高分属于拼图,而不是模式?当我显示高分时,我会显示Game-> Puzzle-> Highscore,并添加高分辨率模式=当前模式的条件。没有理由我需要有条件,因为关系很明确。
所以这就是我所拥有的:
Game->Puzzle->Highscore->User
->Mode
我意识到构建这个的更好方法是与谜题和模式的HABTM关系。所以每个游戏都有很多mode_puzzles,每个mode_puzzle都有一个模式,一个拼图和许多高分。
所以可以修改为:
Game (has many)->ModePuzzle (has many)->HighScore (has one)->User
(has one) -> Mode
(has one) -> Puzzle
问题在于,现在当我想为游戏添加新模式,或者为游戏添加新游戏时,我必须处理这个繁琐的新表,我必须手动创建它,即使它< em>应该可以在没有创建整个新表的情况下建立这种关系。对于每个游戏,任何模式都可以与任何拼图,所以为什么我必须手动创建此表?
人们建议使用烘焙,但从我所看到的烘焙自动生成模型,但我需要自动生成表本身。
我有一种感觉解决方案与连接或其他东西有关,但我没有经验的MySQL连接或cakephp如何处理它们或类似的东西。还有人建议说每个谜题有很多模式,每个模式有很多高分,但我不想这样做,因为每个谜题有很多模式或每个模式有很多谜题之间没有区别......我正在缓存整个结构,所以如果我必须为每个谜题重复每个模式或反之亦然,阵列变得巨大。有没有人有解决这个问题的方法?
答案 0 :(得分:1)
您可能希望更好地熟悉CakePHP提供的模型associations。这是我建议的解决方案:
class Game extends AppModel {
public $hasMany = array('Puzzle');
...
}
class Mode extends AppModel {
public $hasMany = array('Puzzle');
...
}
class Puzzle extends AppModel {
public $belongsTo = array('Game', 'Mode');
public $hasMany = array('HighScore');
...
}
class User extends AppModel {
public $hasMany = array('HighScore');
...
}
class HighScore extends AppModel {
public $belongsTo = array('Puzzle', 'User');
...
}
puzzles
表应该有两个外键,game_id
和mode_id
。与high_scores
表相同,其外键应为puzzle_id
和user_id
。我认为与模式和游戏相关的谜题的组织是显而易见的,因为这些基本上是类别。高分榜本质上是一个谜题与用户(许多用户玩很多游戏)之间的“拥有且属于许多”关系,其中包含一些额外的信息,即他们的分数。
如果你勾勒出关系,这个解决方案似乎很明显,正如我在阅读你问题的前几行时所做的那样。
Game Mode
\ /
\/
Puzzle User
\ /
\/
HighScore