需要根据商品分类、商品名称和条形码这三个查询条件去取出结果集,这三者的关系是:商品分类 and (商品名称 or 条形码)。
laravel框架下 where 条件查询很简单,orWhere 多条件 or 查询语句的拼接,就相比麻烦些,下面给大家带来源码案例,示例如下:
(1)SQL 语句:
select `id` from `user` where (`email` = 'admin@feishuai.vip' and `password` = '123456') or (`mobile` = '13681127231' and `password` = '123456');
laravel model 语句:
User::select(['id'])
->where(function ($query) use ($userName, $password) {
$query->where('password', '=', '123456')->where('email', '=', 'admin@feishuai.vip');
})
->orWhere(function ($query) use ($userName, $password) {
$query->where('password', '=', '123456')->where('mobile', '=', '13681127231');
})
->first();
(2)SQL 语句:
select count(*) from `user` where `type` = 1 and `valid_type` = 2 and (`valid_end` < 1560738570 or `valid_begin` > 1560738570);
laravel model 语句:
$model = User::where('type', 1)->where('valid_type', '=', 2)->where(function ($query) {
$query->where('valid_end', '<', 1560738570)->orWhere(function ($query) {
$query->where('valid_begin', '>', 1560738570);
});
})->first();
(3)SQL 语句:
select count(*) from `user` where `valid_type` = 2 or (`valid_type` = 3 and (`valid_end` < 1560738570 or `valid_begin` > 1560738570));
laravel model 语句:
$model = User::where(function ($query) {
$query->where('valid_type', 2);
})->orWhere(function ($query) {
$query->where('valid_type', '=', 3)->where(function ($query) {
$query->where('valid_end', '<', 1560738570)->orWhere(function ($query) {
$query->where('valid_begin', '>', 1560738570);
});
});
})->first();
(4)原生写法
$goodsModel = $goodsModel->whereRaw('(name like ? or barcode like ?)', [$keyword, $keyword]);
实在想不出怎么写,就写原生 SQL 好了。这也是最后一种保险但不提倡的做法了吧。