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(); } }
<?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'); } }
// 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; }
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!