CakePHP 3.3.0 未更新 hasOne 表

Posted

技术标签:

【中文标题】CakePHP 3.3.0 未更新 hasOne 表【英文标题】:CakePHP 3.3.0 not updating hasOne table 【发布时间】:2016-08-14 19:54:03 【问题描述】:

我有以下功能:

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']);

add函数除了

之外是一样的
     $resident = $this->Residents->get($id, [
        'contain' => [ 'ResidentGeneral' ]
    ]);

相反

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

并且顶部缺少 $id = null。

现在添加函数将正确地保存到数据库和residentsGeneral表中,但编辑不会更新,它们使用相同的表单,所以所有约定都被保留了。

关于此的文档指出,patch 和 save 都可以通过关联向下一层工作,即使 add 不工作也将无法工作,而且由于 add 功能有效,这意味着所有模型也可以正常工作,但这会不更新表中的任何关联记录。

正如您可能看到的,大部分代码都是经过烘焙的,所以这就是框架的预期运行方式。

任何帮助都会很棒,因为我离一台损坏的 PC 仅一步之遥。

【问题讨论】:

我在 3.3 中也遇到了保存关联 (belongsToMany) 的问题,回到 3.2.14 并且它起作用了。我不知道为什么,相同的代码。 我在另一个开发者的电脑上发现了同样的情况,他可以用 3.2.X 编辑,但不能用 3.3.X,可能是内核有问题吗? 刚刚尝试全新安装 2 个表和它们之间的 hasOne,同样的事情,没有更新内容,会在 github 上引发问题 【参考方案1】:

它已经在 master 分支上修复,将在 cakephp 3.3.1 中修复

【讨论】:

以上是关于CakePHP 3.3.0 未更新 hasOne 表的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP:hasOne 相关表在更新时保存多个条目

Cakephp 3.7 hasOne字段数据不保存

CakePHP 模型链接,belongsTo,hasOne

CakePHP模型hasOne关联

HasOne 和 HasMany 用于同一张表 cakephp

在 CakePHP 中使用 HABTM 保存 hasOne