今天在完善项目后台的时候,要做一个多条件搜索,就是那种可单条件,也可多条件的,查询yii2的联合查询,操作成功,记录一下
多条件查询有两种查询方式:
1. andwhere : 无论数据是否为空,都会带上查询参数
//定义一个不为空的参数
$name = 'xiao';
$query = Model::find();
$query->andWhere(['name'=>$name]);
//生成的语句
SELECT * FROM `table_name` WHERE `name`='xiao'
//定义一个为空的参数
$name = '';
$query->andWhere(['name'=>$name]);
//生成的语句
SELECT * FROM `table_name` WHERE `name`=''
2. andFileterWhere : 若数据为空,则在查询中不带此参数
//定义一个不为空的参数
$name = 'xiao';
$query = Model::find();
$query->andFilterWhere(['name'=>$name]);
//生成的语句
SELECT * FROM `table_name` WHERE `name`='xiao'
//定义一个为空的参数
$name = '';
$query->andFilterWhere(['name'=>$name]);
//生成的语句
SELECT * FROM `table_name`
3.多条件联合查询:看看我的功能
//接收参数
$user_id = Yii::$app->request->get('user_id');
$assets_id = Yii::$app->request->get('assets_id');
$order_id = Yii::$app->request->get('order_id');
$assets_type = Yii::$app->request->get('assets_type');
$spend_type = Yii::$app->request->get('spend_type');
//组合查询条件
$where = ['user_id' => $user_id,'assets_id' => $assets_id,'order_id' =>order_id,'assets_type' => $assets_type,'spend_type' => $spend_type];
$log = GridAssetsLog::find();
$log->andFilterWhere($where);
4. 备注:
andFilterWhere方法里的判断走的是isEmpty(),此方法过滤的有:null、空数组、空字符串,没有false和0