Comment calculer la somme de deux colonnes et le nombre de relations associées dans Laravel ?
P粉788571316
P粉788571316 2024-02-21 11:59:52
0
2
479

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粉788571316
P粉788571316

répondre à tous(2)
P粉567112391

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粉189606269

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();
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!