Requête des enregistrements les plus récents avec Laravel Eloquent
Pour récupérer le dernier enregistrement pour chaque valeur unique dans une colonne de table donnée, l'ORM Eloquent de Laravel fournit une solution robuste. Passons en revue un scénario et sa solution éloquente :
Scénario :
Considérons une table nommée "instantané" avec des colonnes telles que "id", "seller_id", " montant" et "created_at". L'objectif est de récupérer la ligne la plus récente pour chaque "seller_id" distinct.
Requête éloquente :
$latestSales = Snapshot::select('seller_id') ->groupBy('seller_id') ->havingRaw('MAX(created_at)') ->orderBy('created_at', 'DESC') ->get();
Explication :
Requête alternative (requête brute) :
Si vous préférez, une requête SQL brute peut être utilisée pour obtenir le même résultat :
SELECT * FROM snapshot WHERE (seller_id, created_at) IN ( SELECT seller_id, MAX(created_at) AS max_created_at FROM snapshot GROUP BY seller_id ) ORDER BY created_at DESC;
Cette requête identifie la dernière ligne pour chaque "seller_id" utilisant une sous-requête pour déterminer la valeur maximale "created_at" au sein de chaque groupe. Les lignes avec des paires correspondantes de "seller_id" et "created_at" (représentant les derniers enregistrements) sont ensuite sélectionnées et classées par "created_at" par ordre décroissant, ce qui donne une liste des enregistrements les plus récents pour chaque vendeur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!