Maison > Questions et réponses > le corps du texte
J'ai deux tables : les acheteurs et les commandes. Les acheteurs ont de nombreuses commandes.
Je veux la somme de tous les acheteurs et le nombre de commandes et deux colonnes de commandes (prix, frais) sur une période de temps spécifique. Je peux obtenir le décompte en procédant comme suit :
Buyer::withCount([ 'orders' => fn ($query) => $query ->where('created_at', '>=', $dateTo) ]) ->get();
Mais comment obtenir la somme (->where('created_at', '>=', $dateTo)
) d'une période de temps spécifiée ?
P粉5671123912024-02-22 09:50:28
De la même manière que vous avez withSum() a>, voici comment procéder
Buyer::withCount([ 'orders' => fn($query) => $query->where('created_at', '>=', $dateTo), ])->withSum([ 'orders' => fn($query) => $query->where('created_at', '>=', $dateTo), ], 'price')->withSum([ 'orders' => fn($query) => $query->where('created_at', '>=', $dateTo), ], 'charge')->get();
P粉1896062692024-02-22 00:03:31
Pour utiliser une variable à l'intérieur d'une fermeture, vous devez envoyer sa valeur à la fonction en utilisant use()
.
Pour utiliser withSum({relation},{column})
, vous devez passer des appels séparés pour chacun.
Buyer::withCount([ 'orders' => function ($query) use ($dateTo) { $query->where('created_at', '>=', $dateTo); } ]) ->withSum([ 'orders' => function ($query) use ($dateTo) { $query->where('created_at', '>=', $dateTo); } ], 'price') ->withSum([ 'orders' => function ($query) use ($dateTo) { $query->where('created_at', '>=', $dateTo); } ], 'charge') ->get();
withSum()
Uniquement disponible dans Laravel version 8 ou supérieure.
EditSyntaxe de la fonction flèche
Buyer::withCount([ 'orders' => fn ($query) $query->where('created_at', '>=', $dateTo), ]) ->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'price') ->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'charge') ->get();