使用where更新查询并与Cakephp 3.X匹配-可能吗?
正在尝试使用匹配根据相关数据更新某些行。 但只有“where”条款起作用。“匹配”被忽略 我做错什么了吗使用where更新查询并与Cakephp 3.X匹配-可能吗?,cakephp,join,sql-update,cakephp-3.0,query-builder,Cakephp,Join,Sql Update,Cakephp 3.0,Query Builder,正在尝试使用匹配根据相关数据更新某些行。 但只有“where”条款起作用。“匹配”被忽略 我做错什么了吗 $tbTU = TableRegistry::get('TaskUsers'); $query = $tbTU->query() ->where([ 'TaskUsers.service_order_id' => $so_id, 'TaskUsers.status IN' => [0, 4, 7, 9], ])
$tbTU = TableRegistry::get('TaskUsers');
$query = $tbTU->query()
->where([
'TaskUsers.service_order_id' => $so_id,
'TaskUsers.status IN' => [0, 4, 7, 9],
])
->contain(['Tasks'])
->matching('Tasks', function($q) {
return $q->where([
'Tasks.task_type IN' => [1, 4, 5]
]);
});
return $query
->update()
->set([
'status' => 3,
'user_id' => NULL,
'modified' => Time::now()
])
->execute();
谢谢 问题的答案似乎是否定的 正如@ndm在注释中所说的,您可以根据DBMS使用子查询 我会这样做:
$subquery = $this->TaskUsers->Tasks->find()
->select(['id'])
->where(['Tasks.task_type IN' => [1, 4, 5]]);
$tbTU->query()
->where([
'TaskUsers.service_order_id' => $so_id,
'TaskUsers.status IN' => [0, 4, 7, 9],
'TaskUsers.task_id IN' => $subquery
])
});
我认为这是不可能的。不管怎样,你的模型之间的关系是什么?如果
TaskUser
属于Task
是,TaskUsers属于Tasks,则似乎不需要匹配语句。例如,如果不使用匹配,我如何更新状态为4或7的TaskUser,因为它属于任务类型为1或5的任务?不支持联接,因此也不能使用容器。对于使用联接的更新查询,必须完全手动编写查询。或者,也可以使用子查询,但这也有一定的限制,这取决于DBMS。@ndm是的,当然你是完全正确的。我将删除或编辑我的答案