我有用户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' => ''
)
)
)
);
Run Code Online (Sandbox Code Playgroud)
该绑定函数的返回值也是如此.
现在当我调用$ this-> User-> saveAll($ this-> data)时,不再在professions_users表中创建行.
任何的想法?
bindModel一个find操作的默认行为是存在,然后恢复为默认关联.您可能认为某个save操作不会触发此操作,但如果您使用Cake的count-caching功能,或者使用带有afterSave执行回调的Behavior find,则可能是错误的.
尝试传递false作为Model::bindModel通话的第二个参数.这将使您的动态绑定持续到请求的持续时间.saveAll通过调用完成后,您始终可以显式重置关联Model::resetAssociations.