我有下一个数据库:
因此我有三个 php 模型Purchase,Supplier并且PurchaseDetail. 我的模型Supplier与:hasManyPurchase
public function purchases() {
return $this->hasMany(Purchase::class, 'supplier_id');
}
该模型Purchase与 有hasMany关系PurchaseDetail:
public function details(){
return $this->hasMany(PurchaseDetail::class, 'purchase_id');
}
从这里开始,关系没有问题。当我尝试获取每个供应商所有采购的总数量时,问题就来了。我做了下一个查询:
$collectionCenters = Supplier::whereHas('purchases', function($q1){
$q1->whereHas('details', function($q2){
$q2->select(\DB::raw('SUM(qty) as purchasesQtyKg'))
->where('unit', 'kg');
});
})->where('supplier_type','=','juridic_person')
->get();
从 laravel 调试栏输出查询:
select * from `suppliers` where exists (select * from `purchases` where `suppliers`.`id` = `purchases`.`supplier_id` and exists (select SUM(qty) as purchasQtyKg from `purchase_details` where `purchases`.`id` = `purchase_details`.`purchase_id` and `unit` = 'kg') and `purchases`.`deleted_at` is null) and `supplier_type` = 'juridic_person'
如您所见,我正在使用与 whereHas 指令的关系。但是什么也没发生,它只抛出了我数据库的三个供应商,但带有别名的列purchasesQtyKg没有出现在结果中:
查询的 Phpmyadmin 输出:
我也做了这样的事情:
$collectionCenters = Supplier::where('supplier_type','=','juridic_person')
->with(['purchases.details' => function($query){
$query->select(\DB::raw("SUM(purchase_details.qty) as purchaseQtyKg"))
->where('unit', $this->unit);
}])->get();
但是什么都没有发生,恐怕因为这应该有效。我会感谢任何想法的人来解决这个问题。非常感谢。


