【发布时间】:2020-08-10 21:13:53
【问题描述】:
所以我在下面定义了几个关系表
父数据库:
public function backorderQuantities(){
return $this->hasMany(BackorderQuantity::class, 'ITEMNMBR', 'ITEMNMBR')->where('SOPTYPE', 5);
}
关系数据库:
public function item(){
return $this->belongsTo(Item::class, 'ITEMNMBR', 'ITEMNMBR');
}
我这样称呼这种关系:
Item::has('backorderQuantities')
->select('ITEMNMBR',
Item::raw("SUM(QTYONHND) as qty"),
Item::raw("SUM(QTYONORD) as ordered"),
Item::raw("SUM( ( CASE WHEN LOCNCODE LIKE 'IT-%' THEN QTYONHND END ) ) as transit"),
)
->where('PRIMVNDR', Auth::user()->vendor_id)
->groupBy('ITEMNMBR')
->orderBy($group['field'], $group['sort'])
);
这很好用,但我还需要从 backorderQuantities 中选择字段,以便我可以按所述字段排序。换句话说,我想做这样的事情:
Item::has('backorderQuantities')
->select('ITEMNMBR',
Item::raw("SUM(QTYONHND) as qty"),
Item::raw("SUM(QTYONORD) as ordered"),
Item::raw("SUM( ( CASE WHEN LOCNCODE LIKE 'IT-%' THEN QTYONHND END ) ) as transit"),
'backorderQuantities->QUANTITY'
)
->where('PRIMVNDR', Auth::user()->vendor_id)
->groupBy('ITEMNMBR')
->orderBy('backorderQuantities->QUANTITY', $group['sort'])
但我遇到了这样的错误:
SQLSTATE[42S22]:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]列名“backorderQuantities”无效。 (SQL: select count(*) as aggregate from (select [ITEMNMBR], SUM(QTYONHND) as qty, SUM(QTYONORD) as ordered, SUM( ( CASE WHEN LOCNCODE LIKE 'IT-%' THEN QTYONHND END ) ) 作为中转, json_value([backorderQuantities], '$."QUANTITY"') from [IV00102] where exists (select * from [SOP10200] where [IV00102].[ITEMNMBR] = [SOP10200].[ITEMNMBR] and [SOPTYPE] = 5 ) 和 [PRIMVNDR] = YHI group by [ITEMNMBR]) as [aggregate_table])
可能是因为当时表格仍在快速加载。有没有办法做到这一点?任何帮助将不胜感激!
【问题讨论】:
标签: php sql-server laravel