Yii2中条件为空时忽略WHERE子句的问题求助
问题解决思路及代码修改
问题根源
你的代码中使用andFilterWhere(['CompanyCode' => $comp_ids])时,当$comp_ids为空数组(即当前用户没有关联任何公司),Yii会自动生成WHERE CompanyCode IS NULL的过滤条件,这就导致只返回CompanyCode为空的产品,不符合你“无论条件是否匹配都返回结果”的需求。
修改后的代码
$comp_ids = AllowArea::find() ->select(['comp_code']) ->where(['user_id' => Yii::$app->user->id]) ->column(); $query = (new \yii\db\Query()) ->select([ 'ProductCode', 'ProductNameFull', 'ProductSpec', 'ProductGroup', 'CompanyCode', 'CompanyName', 'Price', 'PurchasePrice' ])->from('Product'); // 仅当用户有关联公司时,才添加公司代码过滤条件 if (!empty($comp_ids)) { $query->andWhere(['CompanyCode' => $comp_ids]); } $ref = $query->all(Yii::$app->sds);
说明
- 先判断
$comp_ids是否为空,只有当数组非空时,才给查询添加CompanyCode的过滤条件 - 如果用户没有关联任何公司,查询会直接返回
Product表的全部数据,满足你的业务需求
内容的提问来源于stack exchange,提问作者Moeez
相关产品推荐
相关产品推荐

