我正在使用patchEntity()
來更新hasMany關聯,並且工作正常。我的問題與保存在數據庫中的數據無關。我的問題是存儲在實體變量中的關聯數據不同步...CakePHP v3:如何獲取patchEntity以更新請求數據中的關聯
請注意,在下面的方法中,我必須在保存之後執行第二個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'));
}
這與[此問題]不完全相同(http://stackoverflow.com/questions/31006015/reset-an-entity-or-create-a-new-empty-entity-in-controller-after - 節省),但答案是一樣的。成功保存後,您應該重定向,通常是查看或索引頁面。 –
@GregSchmidt我明白爲什麼會這樣,但解決方案比我已經做的更加昂貴。對於任何好奇的人來說,這個鏈接的答案是在保存之後做一個重定向...這將重置/重做所有的 – emersonthis
除此之外,我還沒有根據你的描述得到圖片(數據到底是什麼,修補過,並且保存的實體看起來像?),另一個數據庫又是如何讀取的,甚至是重定向「昂貴」?這不像你的行動正在被每秒1000個請求敲響,還是它? – ndm