我有两张桌子,零件有很多报价。
我需要让所有的零件排序的报价最高的价格或数量,其中报价> 0和报价数量>0。
价格和数量是经过计算的字段。
如何做到这一点?
我试过了
Part::
addSelect([
'quantity' => Offer::select('quantity')
->orderBy('quantity', 'desc')
->whereColumn('part_id', 'parts.id')
->limit(1)
])
->orderBy('quantity', 'desc')
->paginate(3)但是这种方式我不能按数量>0和价格>0过滤零件。
另外,因为在执行此操作时,数量是计算字段
->addSelect([
'qty' => Offer::select(['quantity * 2 as qty'])
->orderBy('qty', 'asc')
->whereColumn('part_id', 'parts.id')
->limit(1)
])我收到引用'qty‘不受支持错误
更多解释:
每个部分都有许多报价。每个报价都有许多发货。Offer`s的
available_quantity = quantity - sum of shipped quantities我需要显示available_quantity >0的部分并按available_quantity对部分进行排序
发布于 2020-01-23 19:08:25
您可以按如下方式订购:
$shipping = Shipping::groupBy('offer_id')->select(DB::raw('SUM(quantity) AS sum_quantity'), 'offer_id', 'id');
Part::join('offers', 'offers.part_id', '=', 'parts.id')
->join(DB::raw("({$shipping->toSql()}) AS ship"), 'ship.offer_id', '=', 'offers.id')
->select('parts.*',DB::raw('MAX(offers.quantity - ship.sum_quantity) AS avaliable_quantity'))
->groupBy('part.id')
->orderBy('avaliable_quantity', 'desc')
->paginate(3)https://stackoverflow.com/questions/59876455
复制相似问题