如何使用整数作为第二个参数在 Yii2 中编写 where 之间的查询

ymi*_*ola 1 postgresql yii2

我在 PostgreSQL 中有这个查询,我想在 Yii2 的模型中实现它:

SELECT * 
FROM some_table 
WHERE 1492257600 BETWEEN start AND end
Run Code Online (Sandbox Code Playgroud)

startend是的属性some_table。在我的模型中,我尝试了以下操作,但是无论我如何编写它,它都会不断抛出相同的错误。

$results = static::find()->where(['between', 1492257600, 'start', 'end'])
                ->all();
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Undefined column: 7 ERROR:  column \"1492257600\" does not exist
The SQL being executed was: SELECT * FROM \"some_table\" WHERE \"1492257600\" BETWEEN 'start' AND 'end'"
Run Code Online (Sandbox Code Playgroud)

在构建查询时,这些符号" "被添加到整数中,因此 PostgreSQL 认为它是表的一列。

谁能告诉我如何正确地写出之间的位置?

rob*_*006 5

BetweenColumnsCondition对于这种情况有专门的表达:

use yii\db\conditions\BetweenColumnsCondition;

$results = static::find()
    ->where(new BetweenColumnsCondition(1492257600, 'BETWEEN', 'start', 'end'))
    ->all();
Run Code Online (Sandbox Code Playgroud)

它会自动引用列名并转义值,因此它应该比 simple 更方便yii\db\Expression


另请注意,WHERE 1492257600 BETWEEN start AND end可能比 慢WHERE 1492257600 >= start AND 1492257600 <= end,如果您的表可能会变大并且使用索引至关重要,我建议进行一些性能测试。