1

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

假设我有一个Advisor,room_id设置为n. 我现在希望取消分配nth房间Advisor- 使用选择字段,我可以重置room_idNULL,具有以下request->data结构:

[Room] => Array
    (
        [name] => TestRoom2
        [type] => single suite
        [id] => 4
    )

[Advisor] => Array
    (
        [0] => Array
            (
                [id] => 14
                [room_id] => 
                [name] => foo
            )
    )

但是,当我尝试通过使用具有相同 generate 的复选框来执行此操作时$this->request->data,MySQL 拒绝更新该NULL值。

此外,似乎在第二种情况下更改room_id显式 in的值request->data没有效果。但是,如果我要更改Advisor.0.namehax,(通过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无论是否选中复选框,都会设置。

任何帮助将不胜感激 - 谢谢!

4

1 回答 1

0

解决了!这与 hasMany 关系上的时髦 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()预期运行。

于 2012-10-05T06:08:20.563 回答