У меня есть отношения 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
1
DarkFenix 1 Май 2019 в 04:52

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
1
Jonas Staudenmeir 1 Май 2019 в 13:48

Надеюсь, это поможет:

    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();
0
Ghanshyam Nakiya 1 Май 2019 в 06:57

Почему бы просто не использовать функцию sum(), поскольку она находится в коллекции?

@foreach($users as $user)
    {{ $user->sales->sum('totaldetails') }}
@endforeach
1
IGP 1 Май 2019 в 04:35