更新查询使用的地方和匹配Cakephp 3.X - 有可能吗?
问题描述:
尝试使用匹配根据相关数据更新某些行。 但只有“where”子句正在工作。 “匹配”被忽略!更新查询使用的地方和匹配Cakephp 3.X - 有可能吗?
我,做错了什么?
$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();
谢谢!!
答
看来这个问题的答案是否定的,根据this问题
正如@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' – arilia
是的,TaskUsers属于任务。例如,我怎样才能更新状态为4或7的TaskUser,属于具有task_type为1或5的任务,而不使用匹配? – npena