在开发商城的时候,需要对订单进行搜索,输入框的内容用来查询订单号或商品名称。目前订单表和订单商品表是分开的,查询订单列表使用关联查询,如下://$this是订单表模型,goods是订单商品表模型publicfunctiongoods(){return$this->hasMany('goods','order_id','id','g');}publicfunctiongetList(){$map=['o.order_no|g.goods_name'=>['like','%A%']];$result=$this->alias('o')->with(['goods'])->where('user_id','=',$userId)->where($map)->order(['createtime'=>'desc'])->page($page,10)->fetchSql(true)->select();}返回结果:SELECT*FROM`order``o`WHERE`user_id`=5AND(`o`.`order_no`LIKE'%A%'OR`g`.`goods_name`LIKE'%A%')ORDERBY`createtime`DESCLIMIT0,10去掉fetchsql的错误提示(goods_name字段是正确的):SQLSTATE[42S22]:Columnnotfound:1054Unknowncolumn'g.goods_name'in'whereclause'更新:目前使用的了LEFTJOIN的写法实现模糊查询的效果,但是实际上是要查询订单列表,LEFTJOIN之后将产品数据组合成订单会发现这里的分页效果会有问题,搜出10条产品有可能是3个订单也有可能是5个订单。$search=$keyword?['o.order_no|g.goods_name'=>['like',"%{$keyword}%"]]:[];$list=$this->alias('o')->field('o.*,g.goods_id,g.images,g.goods_name,g.goods_attr,g.goods_no,g.goods_price')->join('goodsg','o.id=g.order_id','left')->where('o.user_id',$userId)->where($search)->order('o.createtime','DESC')->page($page,10)->select();请问要怎么编写条件来实现订单号和商品名称的模糊查询呢?补充:谢谢解答,目前想到的解决方案是查询的时候订单JOIN产品查出订单,之后再查出产品列表组合结果集。
2 回答
四季花海
TA贡献1811条经验 获得超5个赞
那就直接使用Db类操作数据库吧$search=$keyword?['o.order_no|g.goods_name'=>['like',"%{$keyword}%"]]:[];$list=Db::name('goodsg')->field('o.*,g.goods_id,g.images,g.goods_name,g.goods_attr,g.goods_no,g.goods_price')->join('ordero','o.id=g.order_id')->where('o.user_id',$userId)->where($search)->group('o.order_id')->order('o.createtime','DESC')->page($page,10)->select();
添加回答
举报
0/150
提交
取消