猿问

请教各位一个问题,求解答:TP5关于一对多关联查询的搜索问题

在开发商城的时候,需要对订单进行搜索,输入框的内容用来查询订单号或商品名称。目前订单表和订单商品表是分开的,查询订单列表使用关联查询,如下:
//$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产品查出订单,之后再查出产品列表组合结果集。
月关宝盒
浏览 181回答 2
2回答

四季花海

那就直接使用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();
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答