如何写入yii2中的查询与第二个参数中的整数之间的位置

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (159)

我在postgresql中有这个查询,我想在Yii2的模型中实现。

SELECT * 
FROM some_table 
WHERE 1492257600 BETWEEN start AND end

start与endsome_table 模型中的属性,我尝试了以下代码

但是,无论我怎么写它,它都会不断抛出相同的错误。

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

这是我得到的错误

 Undefined column: 7 ERROR:  column \"1492257600\" does not exist
The SQL being executed was: SELECT * FROM \"some_table\" WHERE \"1492257600\" BETWEEN 'start' AND 'end'",

构建查询时,这些符号“”会被添加到整数中,因此Postgres认为它是表的一列。任何人都可以告诉我如何正确地写出之间的位置?任何帮助将不胜感激...

提问于
用户回答回答于

BetweenColumnsCondition

这种情况有专门的表达方式:

use yii\db\conditions\BetweenColumnsCondition;

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

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

另请注意,WHERE 1492257600 BETWEEN start AND end可能比较慢WHERE 1492257600 >= start AND 1492257600 <= end,我建议做一些性能测试,如果你的表可能会变大,使用指数是至关重要的。

用户回答回答于

我没有postgresql的经验,但这将在两者之间趋于相同,

$results = self::find()
   ->where(['>=', 'start', 1492257600])
   ->andWhere(['<=', 'end', 1492257600])
   ->all();

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励