在带有预加载的查询构建器中使用 OR
Using OR in the query builder with eager loading
蛋糕PHP版本:4.1.4
简介
我正在尝试使用查询生成器来构建复杂的 where 子句并使用预先加载。
SQL
我在 xampp 环境中使用 10.4.14-MariaDB 作为数据库服务器和 PHP 版本 7.4.10。下面查询 returns 想要的结果集 when 运行 in 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。
尝试 1
我通常在查询构造中使用 where then 和 Where,所以我的第一次尝试是:
$query = $Tasks->find()
->contain(['Users'])
->where([
'Tasks.status' => 1,
])
->andWhere([
'Tasks.account_id' => 1393,
'Users.authorised' => 'yes',
'OR' => [['Users.area_id' => 1346]]
]);
尝试 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。
尝试 3
$query = $Tasks->find()->contain('Users', function (Query $q) {
return $q
->where(['Tasks.status' => 1])
->andWhere([
'Tasks.account_id' => 1393,
'Users.authorised' => 'yes',
'OR' => [['Users.area_id' => 1346]]
]);
});
尝试 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]]
]);
});
尝试摘要
None 我的尝试 return 编辑了所需的结果集。如果我删除 OR 条件,则预期结果集为 returned.
问题
我如何构建上面的 SQL 查询,它使用查询生成器 return 所需的结果集。
谢谢 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,'Tasks.account_id' => 1393,
'OR' => [
['Users.authorised' => 'yes'],
['Users.area_id' => 1346],
],
]);
蛋糕PHP版本:4.1.4
简介
我正在尝试使用查询生成器来构建复杂的 where 子句并使用预先加载。
SQL
我在 xampp 环境中使用 10.4.14-MariaDB 作为数据库服务器和 PHP 版本 7.4.10。下面查询 returns 想要的结果集 when 运行 in 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。
尝试 1
我通常在查询构造中使用 where then 和 Where,所以我的第一次尝试是:
$query = $Tasks->find()
->contain(['Users'])
->where([
'Tasks.status' => 1,
])
->andWhere([
'Tasks.account_id' => 1393,
'Users.authorised' => 'yes',
'OR' => [['Users.area_id' => 1346]]
]);
尝试 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。
尝试 3
$query = $Tasks->find()->contain('Users', function (Query $q) {
return $q
->where(['Tasks.status' => 1])
->andWhere([
'Tasks.account_id' => 1393,
'Users.authorised' => 'yes',
'OR' => [['Users.area_id' => 1346]]
]);
});
尝试 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]]
]);
});
尝试摘要
None 我的尝试 return 编辑了所需的结果集。如果我删除 OR 条件,则预期结果集为 returned.
问题
我如何构建上面的 SQL 查询,它使用查询生成器 return 所需的结果集。
谢谢 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,'Tasks.account_id' => 1393,
'OR' => [
['Users.authorised' => 'yes'],
['Users.area_id' => 1346],
],
]);