如何解决在查询构建器中使用OR进行急切加载
CakePHP版本:4.1.4
简介
我正在尝试使用查询生成器来构建复杂的where子句并使用预先加载。
SQL
我在xampp环境中使用10.4.14-MariaDB作为数据库服务器和PHP 7.4.10版本。在xampp中运行时,以下查询返回所需的结果集。
SELECT *
FROM
tasks
JOIN users ON
users.id = tasks.user_id
WHERE tasks.status = 1
AND tasks.account_id = 1393
AND users.authorised' = 'yes'
OR users.area_id = 1346;
我为尝试1和2所引用的信息可以在here中找到。
ATTEMPT 1
我通常在查询构造中使用where和wherewhere,所以我的第一次尝试是:
$query = $Tasks->find()
->contain(['Users'])
->where([
'Tasks.status' => 1,])
->andWhere([
'Tasks.account_id' => 1393,'Users.authorised' => 'yes','OR' => [['Users.area_id' => 1346]]
]);
ATTEMPT 2
$query = $Tasks->find()
->contain(['Users'])
->where(['Tasks.status' => 1])
->where(['Tasks.account_id' => 1393])
->where([
'Users.authorised' => 'yes'
'OR' => [['Users.area_id' => 1346]]
]);
我在尝试3和4中引用的信息可以在here中找到。
ATTEMPT 3
$query = $Tasks->find()->contain('Users',function (Query $q) {
return $q
->where(['Tasks.status' => 1])
->andWhere([
'Tasks.account_id' => 1393,'OR' => [['Users.area_id' => 1346]]
]);
});
ATTEMPT 4
$query = $Tasks->find()->contain('Users',function (Query $q) {
return $q
->where(['Tasks.status' => 1])
->where(['Tasks.account_id' => 1393])
->where([
'Users.authorised' => 'yes','OR' => [['Users.area_id' => 1346]]
]);
});
尝试摘要
我的尝试均未返回所需的结果集。如果删除OR条件,则返回预期结果集。
问题
我该如何构造上面的SQL查询,但确实可以使用查询生成器返回所需的结果集。
感谢Z。
解决方法
我不确定您想要哪种查询,这是两个示例:
// WHERE (tasks.status = 1 AND tasks.account_id = 1393 AND users.authorised' = 'yes') OR users.area_id = 1346;
$query = $Tasks->find()
->contain(['Users'])
->where([
'OR' => [
['Tasks.status' => 1,'Tasks.account_id' => 1393,'Users.authorised' => 'yes'],['Users.area_id' => 1346],],]);
// WHERE tasks.status = 1 AND tasks.account_id = 1393 AND (users.authorised' = 'yes' OR users.area_id = 1346);
$query = $Tasks->find()
->contain(['Users'])
->where([
'Tasks.status' => 1,'OR' => [
['Users.authorised' => 'yes'],]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。