在CakePHP中从与PatchEntity关联的表中删除记录

在CakePHP中从与PatchEntity关联的表中删除记录,cakephp,orm,associations,cakephp-3.0,Cakephp,Orm,Associations,Cakephp 3.0,我有一个CakePHP模型,其中一个工作有很多员工,一个员工属于一个工作。我用来编辑作业和员工的视图是作业视图。以下是来自我的作业控制器的代码: $job = $this->Jobs->get($id, [ 'contain' => ['Employees'] ]); if ($this->request->is(['patch', 'post', 'put'])) { $req = $this->req

我有一个CakePHP模型,其中一个工作有很多员工,一个员工属于一个工作。我用来编辑作业和员工的视图是作业视图。以下是来自我的作业控制器的代码:

   $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']
        ]);
$this->request->数据如下所示:

'employees' =>[
      0 => [
        'id' => 1,
         ... etc ...
当我添加employees时,$this->request->data有更多的数组元素,补丁程序将新记录添加到employees表中

当我删除员工时,$this->request->data的数组元素更少。但是补丁不会删除任何记录。(当数据返回时,我正在用array_值修复数组顺序)

当请求中记录较少时,是否有办法让修补程序删除记录


如果没有,最好的删除方法是什么?

我不知道我是否完全得到了你的问题/想要的结果,但是从你的台词中

有没有一种方法可以让补丁在有记录时删除记录 请求中的记录更少

我读它是因为您想在当前post请求中用新的关联数据替换“旧的”关联数据

hasMany关联的默认值为
'saveStrategy'=>'append'
。(我想从3.1版开始)

您可以将
saveStrategy
更改为
replace
如下:

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

saveStrategy
设置为
replace
时,只有当前post/PATCH实体中的关联数据将在保存时与当前模型记录关联。现有链接关联数据的外键将设置为空。

我不知道是否完全得到了您的问题/想要的结果,但是从您的行中

有没有一种方法可以让补丁在有记录时删除记录 请求中的记录更少

我读它是因为您想在当前post请求中用新的关联数据替换“旧的”关联数据

hasMany关联的默认值为
'saveStrategy'=>'append'
。(我想从3.1版开始)

您可以将
saveStrategy
更改为
replace
如下:

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

saveStrategy
设置为
replace
时,只有当前post/PATCH实体中的关联数据将在保存时与当前模型记录关联。现有链接关联数据的外键将设置为空。

您的
员工
关联配置是什么样子的?@swmcdonnell,您是否找到了此问题的解决方案?请尽快让我知道您的
员工
关联配置是什么样子的?@swmcdonnell,您是否找到了此问题的解决方案?请尽快告诉我