【问题标题】:Deleting Records From Associated Table With PatchEntity in CakePHP在 CakePHP 中使用 PatchEntity 从关联表中删除记录
【发布时间】:2017-07-25 05:05:20
【问题描述】:

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

   $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 ...

当我添加员工时,$this->request->data 有更多的数组元素,补丁会将新记录添加到员工表中。

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

当请求中的记录较少时,有没有办法让补丁删除记录?

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

【问题讨论】:

  • 您的Employees 关联配置是什么样的?
  • @swmcdonnell,你有办法解决这个问题吗?请尽快告诉我

标签: cakephp orm associations cakephp-3.0


【解决方案1】:

我不知道我是否完全得到了您的问题/想要的结果,但来自您的线路

有没有办法让补丁在有记录时删除 请求中的记录更少?

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

hasMany 关联的默认值为 'saveStrategy' => 'append' (https://api.cakephp.org/3.4/source-class-Cake.ORM.Association.HasMany.html#84-89)。 (我认为从 3.1 版开始)

您可以将saveStrategy 更改为replace,例如:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2021-11-14
    相关资源
    最近更新 更多