我有两个关系Advisor belongsTo Room
,Room hasMany Advisor
的模型。 Advisor
在数据库(Advisor.room_id
)中有一个指向特定房间的foreignKey约束。其默认值为NULL
值(表示没有房间的顾问)。
假设我有Advisor
,room_id
设置为n
。我现在希望从nth
取消分配Advisor
房间 - 使用选择字段,我可以使用以下room_id
结构将NULL
重置为request->data
:
[Room] => Array
(
[name] => TestRoom2
[type] => single suite
[id] => 4
)
[Advisor] => Array
(
[0] => Array
(
[id] => 14
[room_id] =>
[name] => foo
)
)
但是,当我尝试通过使用具有相同生成的$this->request->data
的复选框来执行此操作时,MySQL拒绝更新NULL
值。
此外,似乎在第二种情况下在room_id
中明确更改request->data
的值无效。但是,如果我要将Advisor.0.name
更改为hax
,(通过直接修改request->data
),name
字段会保存。
我通过调用$this->Room->saveAll($request->data, array('deep' => true))
保存 - 在选择字段和复选框的情况下都是如此。
我通过反复调用Form
帮助程序来生成一系列复选框:
$count = 0;
// $key is the Advisor id, and $attributes is an array of the form
// array('name' => (string), 'disabled' => (bool))
foreach($options['advisorList'] as $key => $attributes) {
$form[] = $this->Form->hidden(sprintf('Advisor.%s.id', $count), array('value' => $key));
$form[] = $this->Form->input(sprintf('Advisor.%s.room_id', $count), array(
'type' => 'checkbox',
'label' => $attributes['name'],
'disabled' => $attributes['disabled']));
$count++;
}
此外,如果room_id
已设置为NULL
,则设置room_id
没有问题 - 除了room_id
将被设置无论是否选中该复选框。
非常感谢任何帮助 - 谢谢!
答案 0 :(得分:0)
解决!这与hasMany关系上的funky cakePHP $ model-> saveAll()有关。
为了正确更新此表单,在saveAll()中更改可能的所有顾问必须取消设置与各自会议室的关系并保存在数据库中
foreach($copyOfData['Advisor'] as $advisor) {
$advisor['room_id'] = null;
$this->Advisor->save(array('Advisor' => $advisor));
}
只有在完成此操作后,才能调用$this->Advisor->saveAll($this->request->data, array('deep' => true))
并让saveAll()
按预期行事。