2017-07-25 51 views
0

我有一個CakePHP模型,其中一個Job hasmany Employees和一個Employee屬於一個Job。我用來編輯作業和員工的視圖是一個作業視圖。下面是我的工作控制器代碼:在CakePHP中使用PatchEntity從關聯表中刪除記錄

$job = $this->Jobs->get($id, [ 
     'contain' => ['Employees'] 
    ]); 

    if ($this->request->is(['patch', 'post', 'put'])) { 
     $req = $this->request->data; 
     $job = $this->Jobs->patchEntity($job, $req, [ 
      'validate' => false, 
      'associated' => ['Employees'] 
     ]); 
     $saveResult = $this->Jobs->save($job, [ 
      'validate' => false, 
      'associated' => ['Employees'] 
     ]); 

$這個 - >請求 - >數據是這樣的:

'employees' =>[ 
     0 => [ 
     'id' => 1, 
     ... etc ... 

當我加入的員工,這 - $>請求 - >數據有更多的數組元素和補丁將新記錄添加到employees表中。

當我刪除員工時,$ this-> request-> data的數組元素更少。但該補丁不會刪除任何記錄。 (我正在修復array_values在數據返回時排序的數組)。

當請求中的記錄較少時,我可以通過修補程序刪除記錄嗎?

如果不是,刪除的最佳方法是什麼?

+0

你的員工關聯配置是什麼樣的? – ndm

+0

@swmcdonnell,你是否設法解決這個問題?請讓我知道ASAP –

回答

2

我不知道我是否完全搞定你的問題/希望的結果,但是從你的線

有沒有一種方法,我可以得到補丁,刪除記錄的時候有在請求 記錄較少的?

我讀了它,因爲你想用當前發佈請求中的新關聯數據替換「舊」關聯數據。

A hasMany association's has 'saveStrategy' => 'append' as default(https://api.cakephp.org/3.4/source-class-Cake.ORM.Association.HasMany.html#84-89)。 (因爲3.1版本,我認爲)

您可以更改saveStrategyreplace,如:

$this->hasMany('Employees', [ 
    'className' => 'Employees', 
    'foreignKey' => 'employee_id', 
    'saveStrategy' => 'replace' 
]); 

saveStrategy設置爲replace,在目前的職位/ patchEntity只有相關的數據將被關聯到當前模型記錄保存。現有鏈接關聯數據的外鍵將被設置爲空。

+0

這將解決我的問題。謝謝! – swmcdonnell

相關問題