多表查询 搜索副表字段

一张订单表 关联订单商品表 一个订单号可能对应多个订单商品 当我搜索订单商品的title 字段的时候 分页数据不一致 毕竟是用订单表做主表的

clipboard.png

阅读 4.1k
6 个回答

这个需求在电商中比较常见,根据你的代码有 Order Model 和 OrderGoods Model,是一对多关系。一个 Order 包含多个 OrderGoods

$search =$request->input('search');
Order::whereHas('goods', function ($query) use($search) {
    $query->where('title', 'like', '%'.$search.'%');
})->with(['goods' => function ($query) use($search) {
    $query->where('title', 'like', '%'.$search.'%');
}])->get()

解释:

  1. whereHas 是把订单中商品 title 包含了 search 的订单查询出来。
  2. with 是在查询出符合条件订单的时候去关联取 OrderGoods 数据,取出来的 OrderGoods 通过预加载的约束条件,取出只符合 search 条件的 OrderGoods.

如果建立好模型关联,写起来应该是这样的

ShopOrder::with(['goods' => function ($query) use($request) {
    $query->where('title', 'like', '%'.$request->input('search').'%');
}])->get();

模型关联里的预加载添加约束条件
文档地址:https://d.laravel-china.org/d...

shop_order 当主表 left join 吧

我看了下代码 逻辑好像是从订单商品表中的title字段搜索出包含你搜索名称的所有订单?

@Perla
clipboard.png 如这图
搜鲨鱼 显示订单号在加下面的商品

建议用模型关系做,可以用whereHas

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题