join - 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字段内容呢?
谢谢克里斯蒂安
解决方案
推荐阅读
- spring-boot - Spring Boot 外部配置覆盖不起作用
- ajax - 在 laravel 中使用嵌套数据表并构建我自己的 json
- c# - 试图在gridview标题的文本框中设置值
- c++ - 我如何构建默认使用我自己的构建 libc++ 的 clang?
- machine-learning - 我的梯度下降没有给出确切的值
- list - 如何使用循环列表生成 proc sql 表
- java - Apache Velocity:从 json 中删除键/值
- c++ - 鼠标按下事件被触发,但鼠标移动事件未被触发
- bootstrap-modal - 当我第二次在模式之外单击时,它第一次关闭时它没有关闭。我不想关闭那个模式
- javascript - 当源代码中有任何 javascript 时,延迟浏览器中的 DOM 渲染