我的Model关系对于这个CakePHP应用程序应该是什么?

时间:2013-05-01 15:06:25

标签: mysql cakephp has-and-belongs-to-many table-relationships

我无法弄清楚如何构建它。这是我的应用程序:

这是一个游戏网站...说游戏是“单词搜索”,“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如何处理它们或类似的东西。还有人建议说每个谜题有很多模式,每个模式有很多高分,但我不想这样做,因为每个谜题有很多模式或每个模式有很多谜题之间没有区别......我正在缓存整个结构,所以如果我必须为每个谜题重复每个模式或反之亦然,阵列变得巨大。有没有人有解决这个问题的方法?

1 个答案:

答案 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_idmode_id。与high_scores表相同,其外键应为puzzle_iduser_id。我认为与模式和游戏相关的谜题的组织是显而易见的,因为这些基本上是类别。高分榜本质上是一个谜题与用户(许多用户玩很多游戏)之间的“拥有且属于许多”关系,其中包含一些额外的信息,即他们的分数。

如果你勾勒出关系,这个解决方案似乎很明显,正如我在阅读你问题的前几行时所做的那样。

 Game  Mode
    \  /
     \/
   Puzzle  User
        \  / 
         \/
      HighScore