Yii2 where()变量条件

时间:2017-12-13 05:47:58

标签: yii2

我希望preg_match()排序依据currency = 'sum'。如何在Where(['between', 'price', $min_price, $max_price]) and when currency = 'y.e.' sort by andWhere(['between', 'price', $min_price*2, $max_price*2])中编写sql查询?

yii2

2 个答案:

答案 0 :(得分:2)

尝试使用CASE

$anmt_t = (new \yii\db\Query())
        ->select(['*'])
        ->from('anmt')
        ->where(['status' => 'confirmed'])
        ->andWhere('
            CASE
                WHEN currency = "sum" THEN price BETWEEN :mp1 AND :mx1
                WHEN currency = "y.e." THEN price BETWEEN :mp2 AND :mx2
            END
        ')
        ->params([
            'mp1' => $min_price,
            'mx1' => $max_price,
            'mp2' => $min_price * 2,
            'mx2' => $max_price * 2,
        ])
        ->all();

未经测试

答案 1 :(得分:1)

我个人赞成使用Yii2,而不是写一个长查询

$condition = currency == 'y.e.' ? ['between', 'price', $min_price *2, $max_price*2] : ['between',  'price', $min_price, $max_price];

然后

$anmt_t = (new \yii\db\Query())
    ->select(['*'])
    ->from('anmt')
    ->where(['status' => 'confirmed'])
    ->andWhere($condition)
    ->all();