【问题标题】:How to select instances for specific 'n' on m:n relationships?如何为 m:n 关系上的特定“n”选择实例?
【发布时间】:2015-03-11 08:19:54
【问题描述】:

我有两个模型教师和类别。这两者具有多对多关系。

我想得到那些有一个类别等于“OLevels”的老师。使用哪种雄辩的方法或有其他方法可以得到它?

有没有办法得到它:

$teachers = Teacher::where('category', '=', 'OLevels')->get();

【问题讨论】:

    标签: laravel eloquent laravel-5


    【解决方案1】:

    您可以为此使用whereHas

    $category = 'OLevels';
    $teachers = Teacher::whereHas('category', function($q) use ($category){
        $q->where('name', $category);
    })->get();
    

    【讨论】:

    • $teachers = Teacher::whereHas('category', function($q){ $q->where('name', $category); })->get();我想在里面使用变量$category,但是它的作用域在闭包函数中是不可用的...如何获取$category里面的值?
    【解决方案2】:

    您可以使用带有约束的预加载

    $teachers = Teacher::with(['category' => function($query)
    {
        $query->where('category', '=', 'OLevels');
    
    }])->get();
    

    documentation 中的更多信息。

    【讨论】:

    • $teachers = Teacher::with(['category' => function($query) { $query->where('category', '=', $category); }])- >get();我想在其中使用变量 $category,但它的作用域在闭包函数中不可用...我将如何获得 $category 的值?
    • 渴望这不是 OP 要求的。他想过滤teachers 没有急切加载的类别集合。应该使用whereHas
    猜你喜欢
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 2011-08-24
    • 2021-07-26
    • 2013-11-15
    • 2020-11-19
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多