Maison >développement back-end >tutoriel php >Méthodes relationnelles les plus récentes et les plus anciennes à Laravel
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()
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!