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字段内容呢?

谢谢 克里斯蒂安

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...