首頁 > 後端開發 > php教程 > 雄辯的關係查詢與下落相關

雄辯的關係查詢與下落相關

Robert Michael Kim
發布: 2025-03-05 16:17:17
原創
413 人瀏覽過

Eloquent Relationship Queries in Laravel with whereRelation

laravel'swhereRelation方法根據其相關數據簡化了過濾模型。 這種優雅的解決方案用更清潔,更可維護的語法取代了複雜的連接和子征服。 這對於與互連模型(例如電子商務網站或內容管理系統的應用程序)的應用中的複雜過濾器特別有用。

>

考慮以下簡潔的示例:

Post::whereRelation('comments', 'is_approved', true)->get();
登入後複製

這將檢索所有模型,其中至少一個關聯的Postcomment設置為is_approved>。 true讓我們用課程過濾系統說明:

此控制器方法演示瞭如何構建動態過濾器。 生成的SQL高效,可以有效地處理關係條件。 例如:
<?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();
    }
}
登入後複製

總而言之,

// 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();
登入後複製
提供了一種基於關係屬性過濾模型的清晰而表達的方法,從而產生了更清潔,更可維護的Laravel應用程序。

>

以上是雄辯的關係查詢與下落相關的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板