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 ?
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!