为了账号安全,请及时绑定邮箱和手机立即绑定

TP5关于一对多关联查询的搜索问题

TP5关于一对多关联查询的搜索问题

蝴蝶刀刀 2019-09-05 18:45:56
在开发商城的时候,需要对订单进行搜索,输入框的内容用来查询订单号或商品名称。目前订单表和订单商品表是分开的,查询订单列表使用关联查询,如下://$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产品查出订单,之后再查出产品列表组合结果集。
查看完整描述

3 回答

?
慕妹8534170

TA贡献1条经验 获得超0个赞

同问,没找到文章类的。
查看完整回答
反对 回复 2021-01-27
?
跃然一笑

TA贡献1826条经验 获得超6个赞

那就直接使用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();
                            
查看完整回答
反对 回复 2019-09-05
  • 3 回答
  • 0 关注
  • 2250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信