1

我是 Cake 的新手,并试图弄清楚这是怎么可能的,或者我是否以错误的方式去做。

Question hasMany Answer
Quiz HABTM Answer

所以我有以下表格:测验,答案,quizzes_answers

但是,有一种问题不符合标准。这类题需要记录一个image_id。所以我正在考虑将这些数据存储在关联表中,但我不确定如何使用 HABTM 设置:

'unique' => 'keepExisting'

这似乎无法保存我需要的数据。如果是这样,我将如何在视图中构造表单以保存这些数据?


或者...我应该创建另一个模型吗?如果我无法在关联表中成功保存 image_id,也许另一种方法是与 Quiz 模型和新模型建立另一个关联?

Quiz hasMany StudentAnswer

我将存储 quiz_id、question_id、answer_id 和 image_id 的位置。最后一个: image_id 将为 0 除非所问的问题是特定类型的。在这种情况下,我会删除上面的 HABTM 关联。

希望这很清楚。如有必要,我可以进一步详细说明。

更新:我可以为 quizzes_answers 表保存 quiz_id、answer_id 和 image_id。但是,如果进行了更多更新,则会删除先前的关联。而且我有独特的设置来保持模型中的存在。

public $hasAndBelongsToMany = array( // Quiz Model
    'Answer' => array(
        'className' => 'Answer',
        'joinTable' => 'quizzes_answers',
        'foreignKey' => 'quiz_id',
        'associationForeignKey' => 'answer_id',
        'unique' => 'keepExisting',
        'dependent' => true,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )

public $hasAndBelongsToMany = array( // Answer Model
    'Quiz' => array(
        'className' => 'Quiz',
        'joinTable' => 'quizzes_answers',
        'foreignKey' => 'answer_id',
        'associationForeignKey' => 'quiz_id',
        'unique' => 'keepExisting',
        'dependent' => true,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
4

1 回答 1

0

问题中没有HABTM

在问题中描述有:

Quiz hasAndBelongsToMany Answer

即有一个这样的表:

answers_quizes
    answer_id
    quiz_id

谁回答了这个问题呢除非只有一个学生参加过给定的测验——否则,habtm 协会是不合适的。

为连接表创建模型

尤其是鉴于前一点

这是一个简单的规则,它使一些模式/代码决策变得容易:

具有 2 个以上字段的连接表不是连接表。它本身就是一个模型,需要一个主键。

这并不意味着您不能使用 habtm - 它只是意味着可以选择何时使用(可能读取数据)和何时不使用(保存)。

保持现有?

保留现有手段:

当 [unique 设置为] keepExisting 时,行为类似于 true,但不会删除现有关联。

也就是说,如果给定用户和问题存在现有的 habtm 数据,则在插入新记录之前不会将其删除。例如,如果允许一个用户多次回答同一个问题并且您想要存储所有尝试,而不仅仅是最后一个,这将是合适的。

于 2013-07-27T17:38:42.710 回答