什么行不通
在更新表单上,如果我更改复选框值,这些habtm值不会保存到数据库.
在创建和更新表单中,我使用相同的方法:$this-> Employee-> save($this-> data)应自动处理HABTM数据.
什么有效
我按照this tutorial成功建立了HABTM模型:员工拥有和完成了多种语言(即指明哪个员工说哪种语言).
我可以创建关系:在创建具有创建表单的新员工时,检查员工知道并成功保存到数据库的任何语言:员工转到员工数据库表,语言转换为语言,关系转到employee_language表.
在编辑表单上,我看到我在创建员工时检查了哪些checbox.
我发现(可能)有罪
在评估创建和更新员工时数据库中的数据时,我发现$this->数据变量结构不同.
在创建表单上(检查2种语言):
"$this->data" Array [2]
Employee Array [6]
name_lv John Doe
position_lv Computer administrator
enabled 0
Language Array [1]
Language Array [2]
0 1
1 5
在更新表格(检查其他语言,所以3种语言):
"$this->data" Array [1]
Employee Array [8]
name_lv John Doe
position_lv Computer administrator
Language Array [3]
0 1
1 5
2 4
enabled 0
id 68
请注意,现在可以在$this-> data [“Employee”] [“Language”]下访问语言,就像创建$this-> data [“Language”]时一样
解决方法
如果我做$this-> data [“Language”] = $this-> data [“Employee”] [“Language”];然后值被保存(yay),除了employee_language HABTM表中存在重复的条目(哦不).
那么我切换哪个开关使我的复选框可更新?
更多细节(如果你愿意)
(型号)employee.php
class Employee extends AppModel {
var $name = "Employee";
var $hasAndBelongsToMany = array (
"Language" =>
array(
"className" => "Language",
"conditions" => array(
"Language.enabled" => "1"
)
)
);
...
}
(型号)language.php:
class Language extends AppModel {
var $name = "Language";
...
}
(查看)admin_create.ctp(这是创建表单.此代码段呈现所有可用语言的复选框):
...
echo $form->input('Language',array(
'label' => 'Speaks in languages:',
'type' => 'select',
'multiple' => 'checkbox',
'options' => $languages
)); ?>
...
(查看)admin_update.ctp(我可以看到我在创建员工时检查了哪些语言):
...
echo $form->input('Language',array(
'label' => 'Speaks in languages:',
'type' => 'select',
'multiple' => 'checkbox',
'options' => $languages,
'selected' => $html->value('Employee.Language')
)); ?>
...