Maison >développement back-end >tutoriel php >Méthodes relationnelles les plus récentes et les plus anciennes à Laravel

Méthodes relationnelles les plus récentes et les plus anciennes à Laravel

百草
百草original
2025-03-05 15:49:13594parcourir

Latest and Oldest Relationship Methods in Laravel

L'ORM éloquent de Laravel fournit des méthodes pratiques

et latestOfMany() pratiques pour récupérer efficacement les modèles connexes les plus récents ou les plus anciens dans une relation. Cela simplifie les requêtes qui nécessiteraient autrement le tri et le filtrage complexes. oldestOfMany()

Ces méthodes sont particulièrement utiles dans les applications ayant besoin de suivre les données historiques, d'afficher des activités récentes ou d'identifier les événements initiaux.

Considérons un scénario suivant les connexions et les achats des utilisateurs:

class User extends Model
{
    public function lastLogin(): HasOne
    {
        return $this->hasOne(Login::class)->latestOfMany();
    }

    public function firstPurchase(): HasOne
    {
        return $this->hasOne(Purchase::class)->oldestOfMany();
    }
}
Voici un exemple plus complet gérant les interactions, les achats et les abonnements des clients:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;

class Customer extends Model
{
    public function lastInteraction(): HasOne
    {
        return $this->hasOne(Interaction::class)->latestOfMany();
    }

    public function largestPurchase(): HasOne
    {
        return $this->hasOne(Purchase::class)->ofMany('total_amount', 'max');
    }

    public function initialSubscription(): HasOne
    {
        return $this->hasOne(Subscription::class)->oldestOfMany('started_at');
    }

    public function activeMembership(): HasOne
    {
        return $this->hasOne(Membership::class)->latestOfMany()->where('status', 'active');
    }
}
L'accès à ces données est simple:

// Retrieve customers with related data
$customers = Customer::with([
    'lastInteraction',
    'largestPurchase',
    'initialSubscription',
    'activeMembership'
])->get();

// Access relationship attributes
foreach ($customers as $customer) {
    echo "Last Contact: " . $customer->lastInteraction->created_at . PHP_EOL;
    echo "Largest Purchase: $" . $customer->largestPurchase->total_amount . PHP_EOL;
}
Les méthodes

et latestOfMany() améliorent considérablement la lisibilité du code et la maintenabilité en encapsulant la logique de requête complexe dans la définition de la relation. oldestOfMany()

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