首页 > 解决方案 > CakePHP 4 更新 HABTM 连接表上的额外字段

问题描述

我有一个问题,我想通过首先加载这样的模型来更新控制器中的 belongsToMany 关联的 joinTable 中的现有记录/额外字段:

SomeController.php

$query = $this->Object1
    ->find()
    ->contain([
        'Object2'  => [
            'queryBuilder' => function (Query $q)  use ($object2_id) {
                return $q->where(['Objects2.id' => $object2_id]);
            }
        ]
    ])
    ->matching('Object2', function ($q) use ($object2_id) {
        return $q->where(['Object2.id' => $object2_id]);})
    ->where(['Object1.id' => object1_id]);
                
    $user = $query->first();    

然后我更新 joinData 中的一个字段:

SomeController.php
    $object1->objects2[0]->_joinData->status = 1;
    $this->usersTableObj->save($object1)

结果:该字段未更新,没有任何反应。

因为我花了一天时间才找到解决方案(使用 setDirty()),所以我想与您分享:

SomeController.php
    $object1->objects2[0]->_joinData->exampleField = 1;
    $this->usersTableObj->save($object1)
    $user->setDirty('objects2', true);

但我也想知道我的方式是否是更新 joinTable 记录的正确方法(查询感觉超级昂贵)?还是您宁愿选择简单的“取消链接”/“链接”?但是接下来如何插入joinData字段内容呢?

谢谢克里斯蒂安

标签: joincakephpcakephp-4.x

解决方案


推荐阅读