使用 where 更新查询并与 Cakephp 3.X 匹配 - 这可能吗?
Updating query using where and matching with Cakephp 3.X - is it possible?
正在尝试根据相关数据更新某些行,使用匹配。
但只有 "where" 子句有效。 "matching" 被忽略!
我是不是做错了什么?
$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
])
});
正在尝试根据相关数据更新某些行,使用匹配。 但只有 "where" 子句有效。 "matching" 被忽略!
我是不是做错了什么?
$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
])
});