在開發商城的時候,需要對訂單進行搜索,輸入框的內容用來查詢訂單號或商品名稱。目前訂單表和訂單商品表是分開的,查詢訂單列表使用關聯查詢,如下://$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產品查出訂單,之后再查出產品列表組合結果集。
請教各位一個問題,求解答:TP5關于一對多關聯查詢的搜索問題
繁花不似錦
2019-09-19 13:21:17