【发布时间】:2020-08-12 18:00:13
【问题描述】:
我不得不将两个表连接在一起,经过反复试验,我能够得到它,但是在尝试对连接的字段求和以稍后按该数量排序时,我意识到这些数字比他们应该的要高得多是。我试图遵循这个问题的解决方案,但它对我不起作用:The sum amount from join tables is incorrect。下面是我的查询:
$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 an eager loaded table in Laravel?
【问题讨论】:
-
你能提供两个表的结构吗?我认为您可以在
withCount()中使用闭包来获得总和。 -
hmm 不确定如何最好地说明这一点,但项目表和延期交货表都有我正在匹配和加入的字段 ITEMNMBR。除此之外,它们几乎没有共同的领域。我加入,以便我可以检索、显示和排序延期交货。QUANTITY
-
IV00102来自哪里? -
IV00102 与 Item 是同一张表,但由于连接不起作用,我不得不使用表名而不是雄辩的名称。如果我可以让连接与 eloquent
$query = Item::has('backorders') ->Join('backorders', 'item.ITEMNMBR','=','backorders.ITEMNMBR') ->where('PRIMVNDR', Auth::user()->vendor_id)一起工作,这就是它的样子@
标签: php sql-server laravel