我有用户HABTM专业。 在用户编辑中,有一个专业的复选框列表。 当我在用户模型中定义HABTM关系时,它正在工作。 但由于这种关系正在中断其他功能,我将其删除并将其放入用户控制器
$this->User->bindModel(
array(
'hasAndBelongsToMany' =>
array(
'Profession' =>
array(
'className' => 'Profession',
'joinTable' => 'professions_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'profession_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
)
)
);
该绑定函数的返回值也是如此。
现在,当我调用$ this-> User-> saveAll($ this-> data)时,不再在professions_users表中创建行。
有什么想法吗?
答案 0 :(得分:7)
bindModel
的默认行为是针对一个find
操作存在,然后恢复为默认关联。您可能认为save
操作不会触发此操作,但如果您使用Cake's count-caching feature,或执行afterSave
回调执行find
的行为,则可能出错
尝试传递false
作为Model::bindModel
来电的第二个参数。这将使您的动态绑定持续到请求的持续时间。您可以在saveAll
完成后通过调用Model::resetAssociations
明确重置关联。