混淆使用Yii 2查询bulider和哪里,或者哪里?

时间:2016-08-26 14:03:34

标签: php mysql yii2

我正在使用yii 2,我已经编写了查询以使用andWhere和orWhere从表中获取记录,但结果令人困惑。让我告诉你我面临的问题。 我的查询是

Mission::find()->where(['IN', 'id', $ids])->orWhere(['created_by' => $user->id])->activeOrCancel()->all()

active或cancel()在模型中定义

public function activeOrCancel()
{
    $this->andWhere(['status' => '1']);
    $this->orWhere(['status' => 'cancel']);
    return $this;
}

当我调试并检查sql查询时。我得到了这个结果: -

SELECT * FROM `tbl_mission` WHERE (((0=1) OR (`created_by`=75)) AND (`status`='1')) OR (`status`='cancel')

如何获得此类结果

SELECT * FROM `tbl_mission` WHERE ((0=1) OR (`created_by`=75)) AND ((`status`='1') OR (`status`='cancel'))

2 个答案:

答案 0 :(得分:2)

您的startupImage: https://yourapp.firebaseapp.com/path/to/todays/image.jpg 条件可以写成如下:

activeOrCancel()

因此,您可以为此重写status IN ('1', 'cancel') 函数:

activeOrCancel

此外,您可以将第一个条件重写为:

public function activeOrCancel()
{
    $this->andWhere(['status' => ['1', 'cancel']]);
    return $this;
}

因此将两者结合起来:

->where(['or', 'id' => $ids, 'created_by' => $user->id])

答案 1 :(得分:2)

使用中间查询对象对条件进行分组。 例如:

{{1}}

注意:这是一个简单的案例(没有查询参数)。 有关合并查询的更多信息:Yii2 merge queries like cdbcriteria in yii1