查询时怎么根据一个变量有没有值来判断条件?
我学 laravel 没多久,之前一直在看文档,最近才练习上手,但是碰上一个查询的问题,望各位解答一下。
首先我先说一下我目前的情况:一个商品列表,有 2 种条件,种类和关键字,现在我在展示列表的时候需要根据有没有条件做限制,但在 laravel 下不清楚这个需求用 Eloquent 怎么实现,先拿简单代码为例
//种类为0时就不限制种类
$type=$_GET['type']?$_GET['type']:'0';
$key=$_GET['key']?$_GET['key']:'';
if($type){
$where_type='`type`='.$type;
}else{
$where_type='1=1';
}
//关键词key既可用来搜索名称也可以用来搜索商品编号
if($key){
$where_key='`g_name` like %'.$key.'% or `g_goodsnum` like %'.$key;
}else{
$where_key='1=1';
}
select * from goods where $where_type and ($where_key);
//如果种类和关键词都有值的话,最后执行的sql语句是这样的
select * from goods where `type`=1 and (`g_name` like %3213% or g_goodsnum like %3213);
以上基本查询语句差不多就能实现需求,但是不清楚用 Eloquent 怎么实现,想用 where 条件闭包,但是里面不能写条件变量,也不能写第二个参数接值,目前写的代码是这样的(至于操作数据库代码在控制器层写的问题请先跳过不要深究~)
/*
* 商品列表页面
*/
public function goodslist(Request $request){
$wheretype=$request->input('type','0');
if($wheretype=='0'){
$where_type1='like';
$where_type2='%%';
}else{
$where_type1='=';
$where_type2=$wheretype;
}
$model_goods=new Goods();
$count=$model_goods->where('tid',$where_type1,$where_type2)->where(function($query,Request $request){
$wherekey=$request->input('wherekey','');
$query->where('g_name','like','%'.$wherekey.'%')->orWhere('g_goodsnum','like','%'.$wherekey);
})->count();
}
希望帮忙解决!
推荐文章: