У меня есть отношения user->sales->detail_sales, у пользователя одна или несколько продаж, у продажи есть одна или несколько деталей. То, что я пытаюсь сделать, это получить с помощью красноречивый общую сумму всех продаж на пользователя, то есть сделать sum(totaldetails) расчетной суммы с помощью withCount.
Продажа.php
public function detail()
{
return $this->hasMany(Detail:class);
}
public function user()
{
return $this->belongsTo('App\User');
}
ПодробнееРаспродажа
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();
но я хочу, чтобы в модели пользователя было, например, такое свойство, как итог продаж, возможно ли это?
@foreach($users as $user)
{{ $user->salestotal}}
@endforeach
@NikleshRaut Мне нужна сумма всех значений, возвращаемых суммой (промежуточный итог), т.е. сумма (общие детали), и иметь ее как свойство в родительской модели User.
Пожалуйста, опубликуйте отношения sales и detail_sales.
@JonasStaudenmeir Я добавил отношения, надеюсь, вы понимаете, что я хочу получить, если не прокомментировать и предоставить необходимую информацию
где находится столбец subtotal, в таблице sales или в таблице details? не могли бы вы поделиться с нами структурой таблиц, пожалуйста.






Почему бы просто не использовать функцию sum(), ведь все это находится в коллекции?
@foreach($users as $user)
{{ $user->sales->sum('totaldetails') }}
@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();
Спасибо за ответ, но нет смысла копировать код моего вопроса в качестве ответа, я не ищу то, что у меня уже есть.
Вы можете использовать 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
Используйте
asкак$que->select(DB::raw('sum(subtotal) as salestotal'));