CakePHP 3.3.0没有更新hasOne表

时间:2016-08-14 19:54:03

标签: php cakephp orm

我有以下功能:

public function edit($id = null)
{
    $resident = $this->Residents->get($id, [
        'contain' => [ 'ResidentGeneral' ]
    ]);
    if ($this->request->is(['patch', 'post', 'put'])) {
        $resident = $this->Residents->patchEntity($resident, $this->request->data);
        if ($this->Residents->save($resident)) {
            $this->Flash->success(__('The resident has been saved.'));
                return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('The resident could not be saved. Please, try again.'));
        }
    }

    $titles = $this->Residents->ResidentGeneral->Titles->find('list', ['limit' => 200]);
    $sexes = $this->Residents->ResidentGeneral->Sexes->find('list', ['limit' => 200]);
    $maritalStatuses = $this->Residents->ResidentGeneral->MaritalStatuses->find('list', ['limit' => 200]);
    $rooms = $this->Residents->ResidentGeneral->Rooms->find('list', ['limit' => 200]);
    $nationalities = $this->Residents->ResidentGeneral->Nationalities->find('list', ['limit' => 200]);
    $ethnicOrigins = $this->Residents->ResidentGeneral->EthnicOrigins->find('list', ['limit' => 200]);

    $this->set(compact('resident', 'titles', 'sexes', 'maritalStatuses', 'rooms', 'nationalities', 'ethnicOrigins'));
    $this->set('_serialize', ['resident']);
}

添加功能与

除外
     $resident = $this->Residents->get($id, [
        'contain' => [ 'ResidentGeneral' ]
    ]);

改为

    $resident = $this->Residents->newEntity();

和$ id = null从顶部缺失。

现在,add函数将正确保存到数据库并保存到residentGeneral表而不会出现问题但是edit不会更新,它们使用相同的表单,因此保留了所有约定。

关于这一点的文档说明补丁和保存两个都使用关联工作一层,即使这样添加也不会起作用,如果他们没有,也因为添加功能工作,这意味着所有模型也正常工作但是这将不更新表格中的任何相关记录。

正如您可能会看到大部分代码都已被烘焙,因此这就是框架的运行方式。

任何帮助都会很棒,因为我距离破碎的PC只有一个阶段。

1 个答案:

答案 0 :(得分:2)

它已在主分支上修复,将在cakephp 3.3.1

中修复
相关问题