我已经实现了这种关系,其中仓库属于许多具有许多销售的产品。
我的模型就像
仓库.php
public function products () {
return $this->belongsToMany(Product::class)->withPivot('quantity');
}
Run Code Online (Sandbox Code Playgroud)
产品.php
public function sales () {
return $this->hasMany(Sale::class);
}
Run Code Online (Sandbox Code Playgroud)
我想直接从我的仓库模型访问销售,以对销售表中的列进行求和。
我使用了 staudenmeir 的GitHub包,并sales在我的 Warehouse 模型中添加了一个方法。
public function sales () {
return $this->hasManyDeep(Sale::class, ['product_warehouse', Product::class]);
}
Run Code Online (Sandbox Code Playgroud)
我想做的基本上是对销售表的总列进行求和,所以我withSum()在我的 WarehouseController 中添加了一个方法,如下所示
return Warehouse::query()
->withSum('sales', 'total')
->get();
Run Code Online (Sandbox Code Playgroud)
结果
[
{
"id": 1,
"warehouse": "Algeria",
"sales_sum_total": "1000"
},
{
"id": 2,
"warehouse": "India",
"sales_sum_total": "1000"
}
]
Run Code Online (Sandbox Code Playgroud)
这里的问题是,当我向印度仓库添加新销售时,它会为所有仓库返回相同的值。我认为我没有以hasManyDeep()正确的方式使用该方法,或者它可能不适用于我的用例。我能做些什么来让它发挥作用吗?
编辑:我的数据库结构
Schema::create('warehouses', function (Blueprint $table) {
$table->id();
$table->string('warehouse'); …Run Code Online (Sandbox Code Playgroud)