laravel'swhereRelation
方法根據其相關數據簡化了過濾模型。 這種優雅的解決方案用更清潔,更可維護的語法取代了複雜的連接和子征服。 這對於與互連模型(例如電子商務網站或內容管理系統的應用程序)的應用中的複雜過濾器特別有用。
考慮以下簡潔的示例:
Post::whereRelation('comments', 'is_approved', true)->get();
這將檢索所有模型,其中至少一個關聯的Post
comment
設置為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();
>
以上是雄辯的關係查詢與下落相關的詳細內容。更多資訊請關注PHP中文網其他相關文章!