我有一個表 (A) 與另一個表 (B) 具有一對多關系。
我想查詢表 A 并用表 A 結果急切加載表 B - 但我還想按表 B 中的值對表 A 進行排序。
我已嘗試在查詢中使用 OrderBy,并在結果集合上嘗試 SortBy,但無法獲取要按表 B 中找到的值排序的表 A 資料。
我嘗試過的示例:
$query = ModelA::with("ModelB"])->get()->sortByDesc('ModelB.sortValue');
請記住,我只對表 B 中的 LATEST 記錄感興趣。所以我需要查詢表 A 并按表 B 的 LATEST 記錄中的值進行排序。
我怎樣才能做到這一點?
編輯:
下面的(如@ljubadr 所建議的)作業得非常接近,但問題是表 B 中有很多記錄,這意味著它不能可靠地排序,因為它似乎沒有按表 B 中的最新記錄排序。可以我的加入只回傳每個 ID 的最新記錄?
$query = ModelA::select('TableA.*')
->join('TableB', 'TableA.id', '=', 'TableB.col_id')
->groupBy('TableA.id')->orderBy('TableB.sortCol', 'desc')
->with(['x'])
->get();
uj5u.com熱心網友回復:
您可以簡單地執行左連接查詢:
ModelA::query()->leftJoin('model_b_table', 'model_a_table.primary_key', '=', 'model_b_table.foreign_key')->orderBy('model_a_table.target_column')->get();
uj5u.com熱心網友回復:
如果您只需要 TableB 的 ID 和 created_at 列,這應該可以作業:
$latestTableB = ModelB::select('TableA_id', DB::raw('MAX(created_at) as created_at'))
->groupBy('TableA_id');
$query = ModelA::select('TableA.*')
->joinSub($latestTableB, 'latest_TableB', function ($join) {
$join->on('TableA.id', '=', 'latest_TableB.TableA_id');
})
->orderBy('latest_TableB.created_at')
->get();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/421051.html
標籤:
下一篇:洗掉通過Woocommerce注入頭部的行內Css規則(woocommerce-inline-inline-css)
