首页 > 后端开发 > php教程 > 雄辩的关系查询与下落相关

雄辩的关系查询与下落相关

Robert Michael Kim
发布: 2025-03-05 16:17:17
原创
366 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板