1

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

这是一个游戏网站...说游戏是“单词搜索”、“数独”和“填字游戏”。

每个游戏都有很多谜题。所以有 100 个左右不同的单词搜索可以玩,100 个左右不同的数独游戏等等。

每个游戏也有许多模式。因此,每个单词搜索有 5 种左右的方法(定时、不定时等),5 种玩数独的方法等。

每个游戏模式拼图组合都有许多高分。因此,如果您定时玩 wordsearch #3,则会出现某个高分表。如果您玩同一个不计时的谜题,则会出现不同的高分表,如果您玩 #4 计时,则会出现第三个高分表,依此类推。

最后,每个高分都有一个用户。

我最初的制作方式是每个游戏都有很多谜题和模式,每个谜题都有很多高分,每个高分都有一个用户。正如您可能看到的那样,这没有多大意义,因为为什么高分属于拼图,而不是模式?当我显示高分时,我会显示游戏->拼图->高分,并添加高分模式=当前模式的条件。我没有理由需要有条件,因为关系很清楚。

所以这就是我所拥有的:

Game->Puzzle->Highscore->User
    ->Mode

我意识到构建这个的更好方法是与谜题和模式建立 HABTM 关系。所以每个游戏都有很多mode_puzzle,每个mode_puzzle都有一个mode,一个puzzle,还有很多highscore。

所以可以修改为:

Game (has many)->ModePuzzle (has many)->HighScore (has one)->User
                            (has one) -> Mode
                            (has one) -> Puzzle

这样做的问题是,现在当我想向游戏添加新模式或向游戏添加新谜题时,我必须处理这个我必须手动创建的繁琐新表,即使它应该可以在不创建整个新表的情况下建立这种关系。对于每款游戏,任何模式都可以搭配任何谜题,那么为什么我必须手动创建这个表格呢?

人们建议使用 bake 但从我所见 bake 自动生成模型,但我需要表本身自动生成。

我有一种感觉,解决方案与连接或其他东西有关,但我对 MySQL 连接或 cakephp 如何处理它们或类似的东西没有经验。人们还建议说每个拼图有很多模式,每个模式都有很多高分,但我不想这样做,因为每个拼图有很多模式或每个模式有很多拼图之间没有区别......而且我正在缓存整个结构,所以如果我必须为每个谜题重复每种模式,反之亦然,数组会变得很大。有没有人可以解决这个问题?

4

1 回答 1

1

您可能希望更好地熟悉CakePHP 提供的模型关联。这是我建议的解决方案:

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_idand user_id。我认为与模式和游戏相关的谜题组织很明显,因为它们基本上都是类别。高分表本质上是一个谜题和用户(许多用户玩许多游戏)之间的“拥有并属于许多”关系,并带有一些额外的信息,即他们的分数。

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

 Game  Mode
    \  /
     \/
   Puzzle  User
        \  / 
         \/
      HighScore
于 2013-05-01T18:08:15.077 回答