0
votes

Laravel: Sélectionnez les étudiants qui n'ont pas de paiement effectué dans le mois

Je veux faire une liste d'étudiants qui n'ont pas effectué de paiement au cours du mois en cours ou jamais effectué un paiement. Il est possible de faire avec un seul constructeur de requêtes ou une fonction éloquente? Avec le code ci-dessous, je peux faire exactement le contraire de ce que je veux: / xxx


1 commentaires

En fonction de la taille de vos données, l'utilisation de ces fonctions "assistant" est pourri pour l'optimisation de la base de données si vous n'exposez pas correctement vos données. Essentiellement, ils enveloppent la colonne de date autour d'une fonction, par exemple mois (paiements.Created_at) = '05' - cela forcera une analyse séquentielle sur cette colonne car la fonction est volatile. Pour l'optimiser, vous devrez créer des index fonctionnels "Créer une index IDX_BLAH sur les paiements (mois (créé_at))" ou faire une plage de date "-> où entre (" paiements.created_at ", [$ aujourd'hui-> startofmonsh, $ aujourd'hui-> endoftmonth]) (en supposant que $ aujourd'hui est une date de carbone)


4 Réponses :


0
votes

Je ne sais pas quelle valeur vous passez ici.

$indebted = DB::table('students')->where('students.active',1)   
            ->leftJoin('payments', 'students.id', '=', 'payments.user_id')
            ->whereMonth('payments.created_at','=', 06)
            ->get();


0 commentaires

0
votes

Voici les ID étudiants qui ont effectué des paiements dans le mois et l'année actuels

$students = DB::table('students')
            ->whereNotIn('id',$payments)
            ->get();


0 commentaires

0
votes

Vous pouvez utiliser SQL brut dans ce type de situation Je suppose que vous utilisez la base de données MySQL

$sql=SELECT * from students s LEFT JOIN payments p ON s.id=p.user_id
WHERE s.active=1 AND (p.created_at is NULL or MONTH(MAX(p.created_at) < MONTH(CURRENT_DATE()))  )

$students = DB::connection('mysql')->select( DB::raw(" $sql"));
foreach($students as $aStudent){
     ...
     ....
}


0 commentaires

0
votes

Vous pouvez obtenir des étudiants qui n'ont pas de paiements effectués dans ce mois xxx


0 commentaires