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

Requêtes relationnelles éloquentes à Laravel avec wherelalation

Robert Michael Kim
Libérer: 2025-03-05 16:17:17
original
413 Les gens l'ont consulté

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();
Copier après la connexion

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();
    }
}
Copier après la connexion

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();
Copier après la connexion

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 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal