CakePHP应该在HABTM关系中使用keepExisting吗?

时间:2013-07-27 01:16:38

标签: cakephp has-and-belongs-to-many

我是Cake的新手,并试图找出这是可行的,或者我是否采取了错误的方式。

Question hasMany Answer
Quiz HABTM Answer

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

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

'unique' => 'keepExisting'

似乎这不会保存我需要的数据。如果是这样,我将如何在视图中构建表单以保存此数据?


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

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' => ''
    )

1 个答案:

答案 0 :(得分:0)

问题中没有HABTM

在问题中,它描述了:

Quiz hasAndBelongsToMany Answer

即。有一个这样的表:

answers_quizes
    answer_id
    quiz_id

回答了这个问题呢?除非只有一个学生参加过一次测验 - 否则一个habtm协会是不合适的。

为连接表

创建模型

特别是考虑到前一点

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

  

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

这并不意味着你不能使用habtm - 它只是意味着选择何时这样做(或许读取数据)和什么时候(保存)。

keepExisting?

Keep existing表示:

  

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

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