這是我的查詢
$bbaplaukts = DB::table('materials')
->where('statuss', '=', 'Izlietots')
->orwhere('statuss', '=', 'Pasutits')
->leftJoin('bbaplaukts', 'materials.scanner_code', '=', 'bbaplaukts.scanner_code')
->leftJoin('alternatives', 'materials.id', '=', 'alternatives.material_id')
->select(
'materials.scanner_code as scanner_code',
'materials.reference as reference',
'materials.description as description',
'materials.id as id',
'bbaplaukts.place as place',
'alternatives.alternatives as alternatives',
'alternatives.links as links',
DB::raw('count(IF(statuss = "Izlietots",bbaplaukts.statuss,null)) as izlietots'),
DB::raw('count(IF(statuss = "Pasutits",bbaplaukts.statuss,null)) as pasutits'))
->groupBy('materials.scanner_code', 'materials.reference', 'materials.description',
'materials.id', 'bbaplaukts.place', 'alternatives.alternatives', 'alternatives.links')
->orderBy('bbaplaukts.place', 'asc')
->paginate(15);
這是它回傳的結果
#items: array:4 [▼
0 => {#1303 ▼
"scanner_code": "DM DS D2 D0"
"reference": "Metāla ??ēres 20cm"
"description": "Metāla ??ēres 20cm"
"id": 2
"place": "Bbaskapis"
"alternatives": "Test123"
"links": "Test123"
"izlietots": 2
"pasutits": 0
}
1 => {#1322 ▼
"scanner_code": "DM DS D2 D0"
"reference": "Metāla ??ēres 20cm"
"description": "Metāla ??ēres 20cm"
"id": 2
"place": "Bbaskapis"
"alternatives": "Test12345"
"links": "https://www.google.com/search?client=firefox-b-d&q=talsu riepas"
"izlietots": 2
"pasutits": 0
}
如您所見,它們幾乎相同,只有“替代方案”和“鏈接”不同。有沒有辦法讓查詢回傳單個條目,但“替代”和“鏈接”是所有不同條目的陣列?
對不起,標題不好,真的想不出如何表達這一點。
uj5u.com熱心網友回復:
Laravel 通過Model Relationships提供了一個最有效的特性來實作這一點。但是,如果您更喜歡使用查詢構建器,您可以嘗試從主查詢中洗掉“alternatives”連接并單獨進行:
$bbaplaukts = DB::table('materials')
->where('statuss', '=', 'Izlietots')
->orwhere('statuss', '=', 'Pasutits')
->leftJoin('bbaplaukts', 'materials.scanner_code', '=', 'bbaplaukts.scanner_code')
->select(
'materials.scanner_code as scanner_code',
'materials.reference as reference',
'materials.description as description',
'materials.id as id',
'bbaplaukts.place as place',
DB::raw('count(IF(statuss = "Izlietots",bbaplaukts.statuss,null)) as izlietots'),
DB::raw('count(IF(statuss = "Pasutits",bbaplaukts.statuss,null)) as pasutits'))
->groupBy('materials.scanner_code', 'materials.reference', 'materials.description',
'materials.id', 'bbaplaukts.place')
->orderBy('bbaplaukts.place', 'asc')
->paginate(15);
foreach ($bbaplaukts as $key=>$bbaplaukt){
$alternatives = DB::table('alternatives')->select('alternatives')->where('material_id', $bbaplaukt->id)->get();
$links = DB::table('alternatives')->select('links')->where('material_id', $bbaplaukt->id)->get();
$bbaplaukts[$key]->alternatives = $alternatives;
$bbaplaukts[$key]->links = $links;
}
return response($bbaplaukts, 200);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/402137.html
上一篇:如何避免在承諾中回傳可觀察的
