CakePHP v3:如何让patchEntity更新请求数据中的关联
发布时间:2020-12-13 15:56:41 所属栏目:PHP教程 来源:网络整理
导读:我正在使用patchEntity()来更新hasMany关联,它工作正常.我的问题与数据库中保存的数据无关.我的问题是存储在实体变量中的关联数据不同步…… 请注意,在下面的方法中,我必须在保存之后执行第二次get()以重新读取数据库中的数据.如果我删除它,下一个视图将显示
我正在使用patchEntity()来更新hasMany关联,它工作正常.我的问题与数据库中保存的数据无关.我的问题是存储在实体变量中的关联数据不同步……
请注意,在下面的方法中,我必须在保存之后执行第二次get()以重新读取数据库中的数据.如果我删除它,下一个视图将显示陈旧的关联数据,因为patchEntity更新外键,但实际的关联对象仍然是前一个(从保存之前). 我希望有一种方法可以不连续进行两次数据库查询.这是预期的行为吗?有没有更好的方法呢? public function edit($id = null) { //1////////////////////////////////////////// $screen = $this->Screens->get($id,[ 'contain' => ['Blocks'=>['Datasources'=>['Agencies']]] ]); if ($this->request->is(['patch','post','put'])) { $screen = $this->Screens->patchEntity( $screen,$this->request->data,[ 'associated'=>['Blocks.Datasources'] ] ); if ($this->Screens->save($screen)) { //2////////////////////////////////////////// #get the UPDATED properties... specifically,the associations don't get updated automatically by patchEntity above $screen = $this->Screens->get($id,[ 'contain' => ['Blocks'=>['Datasources'=>['Agencies']]] ]); $this->Flash->success('The screen has been saved.'); } else { $this->Flash->error('The screen could not be saved. Please,try again.'); } } $this->set(compact('screen')); } 解决方法
当然,没有办法避免第二个查询.即使框架实现了该功能,它也需要使用另一个查询来查找与最新数据的关联.
因此,虽然看起来很浪费,但这是唯一的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |