在更新表单上,如果我更改复选框值,则这些 habtm值不会保存到数据库。
在创建和更新表单中,我使用相同的方法:$this->Employee->save($this->data)
,它应该自动处理HABTM数据。
我通过以下this tutorial成功设置了HABTM模型:员工拥有和贝隆语言语言(即指定哪个员工说哪种语言)。
我可以创建关系:在使用创建表单创建新员工时,检查员工知道并成功保存到数据库的任何语言:员工转到员工数据库表, language 的语言,关系转到 employee_language 表。
在编辑表单上,我会在创建员工时看到我检查了哪些checbox 。
在评估创建和更新员工时数据库中的数据时,我发现$this->data
变量结构不同。
在创建表单上(检查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"
)
)
);
...
}
(model)language.php:
class Language extends AppModel {
var $name = "Language";
...
}
(查看)admin_create.ctp(这是创建表单。此代码段呈现所有可用语言的复选框):
...
<?php
echo $form->input('Language',array(
'label' => 'Speaks in languages:',
'type' => 'select',
'multiple' => 'checkbox',
'options' => $languages
)); ?>
...
(查看)admin_update.ctp(我可以看到我在创建员工时检查了哪些语言):
...
<?php
echo $form->input('Language',array(
'label' => 'Speaks in languages:',
'type' => 'select',
'multiple' => 'checkbox',
'options' => $languages,
'selected' => $html->value('Employee.Language')
)); ?>
...
答案 0 :(得分:0)
Mark在解决问题的评论中提供了答案:
...你不需要,你不应该在你的表格中使用“选中” 输入数组。
是的,当我删除“已选择”属性时,突然我能够对HABTM数据进行更新。 所以现在我的输入控件看起来像:
<?php
echo $form->input('Language',array(
'label' => 'Speaks in languages:',
'type' => 'select',
'multiple' => 'checkbox',
'options' => $languages
)); ?>
没有办法将评论转换为答案,试图联系@mark发表他的评论作为答案,但没有采取任何行动,我正在回答我自己的问题,以便其他人可以看到这个问题有一个解。这就是meta:https://meta.stackexchange.com/questions/1555/mark-a-comment-as-answer-to-a-question/1558#1558
的建议