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 表的主要内容,如果未能解决你的问题,请参考以下文章