1
votes

Comment obtenir la somme d'une autre somme dans une relation éloquente Laravel

J'ai les relations user-> sales-> detail_sales , un utilisateur a une ou plusieurs ventes, une vente a un ou plusieurs détails. Ce que j'essaie de faire, c'est obtenir avec ELOQUENT , le total de toutes les ventes par utilisateur, c'est-à-dire faire une somme (totaldetails) du total calculé avec withCount.

@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)'));
    }]);
}])->get();

Utilisateur

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

Cette requête que j'ai actuellement

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

mais je la souhaite dans le Modèle utilisateur, pour avoir une propriété comme salestotal par exemple, est-ce possible?

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


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


5 commentaires

Utilisez comme comme $ que-> select (DB :: raw ('sum (subtotal) as salestotal'));


@NikleshRaut Ce dont j'ai besoin est la somme de toutes les valeurs renvoyées par sum (sous-total) c'est-à-dire sum (totaldetails) et l'avoir comme propriété dans le modèle parent User.


Veuillez publier les relations ventes et detail_sales .


@JonasStaudenmeir J'ai ajouté les relations, j'espère que vous comprenez ce que je veux obtenir, sinon commenter et fournir les informations nécessaires


où se trouve la colonne subtotal , dans le tableau sales ou dans le tableau details ? pourriez-vous partager la structure des tableaux avec nous s'il vous plaît.


3 Réponses :


1
votes

Pourquoi ne pas simplement utiliser la fonction sum () car tout est dans une collection?

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


0 commentaires

0
votes

J'espère que cela aide:

    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();


1 commentaires

Merci d'avoir répondu, mais ça ne sert à rien de copier le code de ma question comme réponse, je ne cherche pas quelque chose que j'ai déjà.



1
votes

Vous pouvez utiliser withCount () avec un Relation 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 commentaires