鍍金池/ 問答/PHP  數(shù)據(jù)庫/ 多表查詢 搜索副表字段

多表查詢 搜索副表字段

一張訂單表 關(guān)聯(lián)訂單商品表 一個訂單號可能對應(yīng)多個訂單商品 當(dāng)我搜索訂單商品的title 字段的時候 分頁數(shù)據(jù)不一致 畢竟是用訂單表做主表的

clipboard.png

回答
編輯回答
浪婳

@Perla
clipboard.png 如這圖
搜鯊魚 顯示訂單號在加下面的商品

2018年4月20日 14:16
編輯回答
維他命

shop_order 當(dāng)主表 left join 吧

2017年1月10日 04:11
編輯回答
骨殘心

如果建立好模型關(guān)聯(lián),寫起來應(yīng)該是這樣的

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

模型關(guān)聯(lián)里的預(yù)加載添加約束條件
文檔地址:https://d.laravel-china.org/d...

2018年8月24日 19:16
編輯回答
凹凸曼

建議用模型關(guān)系做,可以用whereHas

2017年1月16日 07:52
編輯回答
不歸路

我看了下代碼 邏輯好像是從訂單商品表中的title字段搜索出包含你搜索名稱的所有訂單?

2017年2月6日 13:36
編輯回答
眼雜

這個需求在電商中比較常見,根據(jù)你的代碼有 Order Model 和 OrderGoods Model,是一對多關(guān)系。一個 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 是在查詢出符合條件訂單的時候去關(guān)聯(lián)取 OrderGoods 數(shù)據(jù),取出來的 OrderGoods 通過預(yù)加載的約束條件,取出只符合 search 條件的 OrderGoods.
2017年12月25日 22:59