如何在雄辩的Laravel关系中获得另一笔金额的总和

问题描述 投票:0回答:3

我有关系user->sales->detail_sales,用户有一个或多个销售,销售有一个或多个细节。我想要做的是使用ELOQUENT获取,即每个用户的所有销售额的总和,即使用withCount生成计算总额的sum(totaldetails)

Sale.php

public function detail()
{
    return $this->hasMany(Detail:class);
}


public function user()
{
    return $this->belongsTo('App\User');
}

DetailSale

public function sale()
{
    return $this->belongsTo(Sale::class);
}

用户

public function sales()
{
    return $this->hasMany(Sale::class );
}

我目前有这个查询

return App\User::with(['sales' => function($query){
    // get total for detail_sales for sale
    $query->withCount(['detail as totaldetails' => function($que){
        $que->select(DB::raw('sum(subtotal)'));
    }]);
}])->get();

但是我希望在用户模型中,有一个像salestotal这样的属性,是否可能?

@foreach($users as $user)
  {{ $user->salestotal}}
@endforeach
laravel eloquent laravel-5.5
3个回答
1
投票

你可以使用withCount()HasManyThrough关系:

class User extends Model
{
    public function details()
    {
        return $this->hasManyThrough(Detail:class, Sale::class);
    }
}

return App\User::withCount(['details as salestotal' => function($query) {
    $query->select(DB::raw('sum(subtotal)'));
}])->get();

@foreach($users as $user)
    {{ $user->salestotal }}
@endforeach

0
投票

为什么不使用sum()函数,因为它全部在Collection中?

@foreach($users as $user)
    {{ $user->sales->sum('totaldetails') }}
@endforeach

0
投票

我希望这有帮助:

    return App\User::with(['sales' => function($query){
     // get total for detail_sales for sale
        $query->withCount(['detail as totaldetails' => function($que){
       $que->select(DB::raw("SUM(subtotal) as salestotal"));
       }]);
    }])->get();
© www.soinside.com 2019 - 2024. All rights reserved.