Maison >développement back-end >tutoriel php >Requêtes relationnelles éloquentes à Laravel avec wherelalation

Requêtes relationnelles éloquentes à Laravel avec wherelalation

Robert Michael Kim
Robert Michael Kimoriginal
2025-03-05 16:17:17366parcourir

Eloquent Relationship Queries in Laravel with whereRelation

La méthode whereRelation de Laravel simplifie les modèles de filtrage en fonction de leurs données connexes. Cette solution élégante remplace les jointures et les sous-requêtes complexes avec une syntaxe plus propre et plus maintenable. Il est particulièrement utile pour construire des filtres sophistiqués dans des applications avec des modèles interconnectés, tels que des sites de commerce électronique ou des systèmes de gestion de contenu.

Considérez cet exemple concis:

Post::whereRelation('comments', 'is_approved', true)->get();

Cela récupère tous les modèles Post où au moins un associé comment a is_approved réglé sur true.

illustrons avec un système de filtrage du cours:

<?php namespace App\Http\Controllers;

use App\Models\Course;
use Illuminate\Http\Request;

class CourseController extends Controller
{
    public function browse(Request $request)
    {
        $courses = Course::query();

        // Filter by instructor rating
        if ($request->has('top_rated')) {
            $courses->whereRelation('instructor', 'rating', '>=', 4.5);
        }

        // Filter by recent student reviews
        if ($request->has('well_reviewed')) {
            $courses->orWhereRelation('reviews', 'created_at', '>=', now()->subDays(30));
        }

        // Filter by active discussion
        if ($request->has('active_discussion')) {
            $courses->whereRelation('discussions', 'last_activity', '>=', now()->subDays(7));
        }

        return $courses->with(['instructor', 'reviews'])->latest()->paginate();
    }
}

Cette méthode de contrôleur montre comment construire des filtres dynamiques. Le SQL généré est très efficace, gérant efficacement les conditions de relation. Par exemple:

// Filters courses with:
// - Highly rated instructors (4.5+)
// - OR recent reviews (within the last 30 days)
// - AND active discussions (within the last 7 days)
$courses = Course::whereRelation('instructor', 'rating', '>=', 4.5)
    ->orWhereRelation('reviews', 'created_at', '>=', now()->subDays(30))
    ->whereRelation('discussions', 'last_activity', '>=', now()->subDays(7))
    ->get();

En résumé, whereRelation offre une méthode claire et expressive pour filtrer les modèles basés sur les attributs de relation, entraînant des applications Laravel plus propres et plus maintenables.

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