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

百草
Libérer: 2025-03-05 15:49:13
original
598 Les gens l'ont consulté

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();
    }
}
Copier après la connexion
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');
    }
}
Copier après la connexion
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;
}
Copier après la connexion
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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal