У меня есть отношения user->sales->detail_sales
, у пользователя одна или несколько продаж, в продаже одна или несколько деталей. Я пытаюсь получить с помощью ELOQUENT сумму всех продаж на пользователя, то есть получить sum(totaldetails)
рассчитанной суммы с помощью withCount.
< Сильный > 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();
Но я хочу, чтобы в модели User было свойство, например, salestotal , возможно ли это?
@foreach($users as $user)
{{ $user->salestotal}}
@endforeach
3 ответа
Вы можете использовать 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
Надеюсь, это поможет:
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();
Почему бы просто не использовать функцию sum()
, поскольку она находится в коллекции?
@foreach($users as $user)
{{ $user->sales->sum('totaldetails') }}
@endforeach
Похожие вопросы
Новые вопросы
laravel
Laravel - это бесплатная веб-инфраструктура PHP с открытым исходным кодом, созданная Тейлором Отвеллом и предназначенная для разработки веб-приложений по архитектурному шаблону модель-представление-контроллер (MVC) на основе Symfony. Исходный код Laravel размещен на GitHub и лицензирован в соответствии с условиями лицензии MIT.