[英]sum incorrect after using join in Eloquent Laravel
我不得不將兩個表連接在一起,經過反復試驗,我能夠得到它,但是在嘗試對連接的字段求和以稍后按該數量排序時,我意識到這些數字比它們應該的要高得多。 我試圖遵循這個問題的解決方案,但它對我不起作用: 連接表的總和不正確。 下面是我的查詢:
$query = Item::has('backorders')
->join('SOP10200', 'IV00102.ITEMNMBR','=','SOP10200.ITEMNMBR')
->select('IV00102.ITEMNMBR',
//These sums are wrong when using join
Item::raw("SUM(IV00102.QTYONHND) as qty"),
Item::raw("SUM(IV00102.QTYONORD) as ordered"),
Item::raw("SUM( ( CASE WHEN IV00102.LOCNCODE LIKE 'IT-%' THEN IV00102.QTYONHND END ) ) as transit"),
Item::raw("SUM(SOP10200.QUANTITY) as backorder"),
)
->where('IV00102.PRIMVNDR', Auth::user()->vendor_id)
->groupBy('IV00102.ITEMNMBR')
->orderBy($group['field'], $group['sort'])
->limit(2147483647);
以下是我的人際關系:
public function item(){
return $this->belongsTo(Item::class, 'ITEMNMBR', 'ITEMNMBR');
}
public function backorders(){
return $this->hasMany(Backorder::class, 'ITEMNMBR', 'ITEMNMBR')->where('SOPTYPE', 5);
}
我想指出,我不能在連接中使用關系標識符,而不得不直接引用表,但關系以其他方式工作,並且在沒有連接的情況下進行了測試。 換句話說,我加入的全部原因是我可以按延期交貨(SOP10200)排序。 如果有一個更優雅的解決方案,我完全贊成。 為了避免重復提供的解決方案,我還想附上我之前與解決連接問題相關的問題: Is there a way to select fields from a eager loading table in Laravel?
我通過實現子查詢解決了這個問題,對子查詢進行求和,然后最終將其加入主查詢:
$subQuery = Backorder::select('ITEMNMBR', Backorder::raw('sum(QUANTITY) as backorder'), 'SOPTYPE')
->groupBy('ITEMNMBR', 'SOPTYPE');
$subQuerySql = $subQuery->toSql();
$query = Item::has('backorders')
->where('IV00102.PRIMVNDR', Auth::user()->vendor_id)
->leftjoin(Item::raw('(' . $subQuerySql . ') as bbo'),function($join) use ($subQuery) {
$join->on('IV00102.ITEMNMBR', '=', 'bbo.ITEMNMBR');
})
->where('bbo.SOPTYPE', 5)
->select('IV00102.ITEMNMBR',
'bbo.backorder',
Item::raw("SUM(IV00102.QTYONHND) as qty"),
Item::raw("SUM(IV00102.QTYONORD) as ordered"),
Item::raw("SUM( ( CASE WHEN IV00102.LOCNCODE LIKE 'IT-%' THEN IV00102.QTYONHND END ) ) as transit"),
)
->mergeBindings($subQuery->getQuery())
->groupBy('IV00102.ITEMNMBR', 'bbo.backorder')
->orderBy($group['field'], $group['sort'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.