Как получить сумму другой суммы в красноречивых отношениях Laravel

У меня есть отношения 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

Используйте as как $que->select(DB::raw('sum(subtotal) as salestotal'));

Niklesh Raut 01.05.2019 04:03

@NikleshRaut Мне нужна сумма всех значений, возвращаемых суммой (промежуточный итог), т.е. сумма (общие детали), и иметь ее как свойство в родительской модели User.

DarkFenix 01.05.2019 04:06

Пожалуйста, опубликуйте отношения sales и detail_sales.

Jonas Staudenmeir 01.05.2019 04:08

@JonasStaudenmeir Я добавил отношения, надеюсь, вы понимаете, что я хочу получить, если не прокомментировать и предоставить необходимую информацию

DarkFenix 01.05.2019 04:14

где находится столбец subtotal, в таблице sales или в таблице details? не могли бы вы поделиться с нами структурой таблиц, пожалуйста.

Tharaka Dilshan 01.05.2019 08:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
5
401
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Почему бы просто не использовать функцию 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();

Спасибо за ответ, но нет смысла копировать код моего вопроса в качестве ответа, я не ищу то, что у меня уже есть.

DarkFenix 02.05.2019 05:50
Ответ принят как подходящий

Вы можете использовать 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

Другие вопросы по теме