我必须将两个表连接在一起,经过一番尝试和错误后,我能够得到它,但是在尝试对连接字段求和以便稍后按该数量排序时,我意识到数字比预期的要高得多。我尝试遵循这个问题的解决方案,但它对我不起作用:The sum amount from join table is invalid。下面是我的查询:
$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)进行排序。如果有一个更优雅的解决方案,我完全赞成。
茅侃侃