Comment puis-je récupérer la dernière ligne de chaque vendeur unique dans un tableau à l'aide de Laravel Eloquent ?

Linda Hamilton
Libérer: 2024-10-25 14:57:02
original
158 Les gens l'ont consulté

How can I retrieve the latest row for each unique seller in a table using Laravel Eloquent?

Récupération des dernières lignes avec Max Created_at à l'aide de Laravel Eloquent

Dans Laravel Eloquent, la récupération des dernières lignes pour chaque champ unique peut être réalisée via une approche globale. Dans une table donnée qui suit les ventes, où chaque entrée comprend des champs tels que id, seller_id, montant et create_at, l'objectif est de récupérer la ligne la plus récente pour chaque seller_id distinct.

Récupération de la dernière Ligne pour un vendeur spécifique

Pour obtenir la dernière ligne pour un vendeur spécifique, Laravel Eloquent propose une méthode simple :

<code class="php">$sales = Snapshot::where('seller_id', '=', 15)
    ->orderBy('created_at', 'DESC')
    ->first();</code>
Copier après la connexion

Cette requête sélectionne tous les enregistrements de la table Snapshot où seller_id est égal à 15, les classe par ordre décroissant en fonction de create_at et récupère la première ligne, renvoyant ainsi la dernière vente pour ce vendeur.

Récupération de la dernière ligne pour chaque vendeur

L'extension de cette approche pour récupérer la dernière ligne pour chaque vendeur individuel nécessite une stratégie plus avancée. La requête SQL suivante accomplit cette tâche :

<code class="sql">select s.*
from snapshot s
left join snapshot s1 on s.seller_id = s1.seller_id
and s.created_at < s1.created_at
where s1.seller_id is null
Copier après la connexion

Dans cette requête, la sous-requête s1 sélectionne les enregistrements en fonction de la condition s.created_at < s1.created_at, qui garantit que seuls les enregistrements dont les lignes suivantes ont un horodatage créé_at ultérieur sont inclus. La requête externe sélectionne ensuite toutes les lignes de la table principale qui n'ont aucune ligne correspondante dans la sous-requête, isolant ainsi efficacement les derniers enregistrements pour chaque seller_id.

Implémentation de la requête dans Laravel Eloquent

Pour implémenter cette requête à l'aide de Laravel Eloquent, la méthode du générateur de requêtes peut être utilisée :

<code class="php">DB::table('snapshot as s')
  ->select('s.*')
  ->leftJoin('snapshot as s1', function ($join) {
        $join->on('s.seller_id', '=', 's1.seller_id')
             ->whereRaw(DB::raw('s.created_at < s1.created_at'));
   })
  ->whereNull('s1.seller_id')
  ->get();</code>
Copier après la connexion

Cette requête réplique la fonctionnalité de la requête SQL en effectuant une jointure gauche entre la table d'instantané et une sous-requête. (s1) qui identifie les lignes ultérieures pour chaque seller_id. La condition WhereNull filtre les lignes qui ont des lignes suivantes, ne laissant que le dernier enregistrement pour chaque seller_id. L'exécution de cette requête renvoie une collection des ventes les plus récentes pour chaque vendeur unique dans le tableau.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
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!