我正在使用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'))
答案 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