无法使用CakePHP中的复选框保存属于数据

时间:2012-09-26 07:57:55

标签: php cakephp cakephp-2.0

我有两个关系Advisor belongsTo RoomRoom hasMany Advisor的模型。 Advisor在数据库(Advisor.room_id)中有一个指向特定房间的foreignKey约束。其默认值为NULL值(表示没有房间的顾问)。

假设我有Advisorroom_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将被设置无论是否选中该复选框。

非常感谢任何帮助 - 谢谢!

1 个答案:

答案 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()按预期行事。