Maison >développement back-end >tutoriel php >Comment puis-je récupérer la dernière ligne de chaque vendeur unique dans un tableau à l'aide de Laravel Eloquent ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 14:57:02263parcourir

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>

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

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>

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!

Déclaration:
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