我有这个 SQL 查询正在执行我想要的操作:
1 2 3 4 |
|
我尝试将其复制为 Yii 查询生成器,如下所示:
1 2 3 4 5 6 7 8 9 |
|
但是我打印了此查询生成器使用 getRawSql()
生成的 SQL,它以这种奇怪的方式返回:
1 2 3 4 5 6 7 8 9 10 11 |
|
抱歉,如果这样读起来很困难。
任何人都可以帮助我按照我想要的方式制作查询生成器吗?我将不胜感激
P粉5961919632024-04-02 19:22:21
每当您使用 andWhere()
或 orWhere()
时,查询生成器都会采用现有条件并执行如下操作:
或
分别。
因此,如果您已经遇到一些复杂的情况,然后尝试致电
1 2 |
|
你将会得到
但就你而言,你需要得到类似的东西:
要获得类似的结果,您可以以相同的方式构建第一个复杂条件,但必须在一个 orWhere()
调用中构建第二个条件。或者为了使其更具可读性,您可以在单个调用中分别构建两个复杂的条件:
Table1::find()
->joinWith(['table2'])
->where([
'AND',
['Table1.idOwner' => $idOwner, 'Table2.enabled' => 1],
['<=', 'day(Table2.creationDate)', $expirationDay],
['=', "date_format(Table2.creationDate, '%Y-%m')", $previousExpirationMonthYear]
])->orWhere([
'AND',
['Table1.idOwner' => $idOwner, 'Table2.enabled' => 1],
['!=', "date_format(Table2.creationDate, '%Y-%m')", $currentExpirationMonthYear],
['!=', "date_format(Table2.creationDate, '%Y-%m')", $previousExpirationMonthYear]
])->all();