Laravel渴望加载功能限制

时间:2017-01-15 18:21:35

标签: php laravel laravel-5.3 eager-loading

我有一个工作职能,但是,我想限制每位顾问的治疗次数。

工作示例:

Clinic::where('user_id', Auth::id())
            ->with('consultants.specialism', 'consultants.treatments')
            ->first();

建议(但不起作用)的例子:

Clinic::where('user_id', Auth::id())
            ->with('consultants.specialism')
            ->with(['consultants.treatments' => function ($query) {
                $query->take(3);
            }])
            ->first();

不幸的是,takelimit功能将其限制为返回的治疗总数。

  

我希望将每位顾问的治疗方法限制在a   最多3个,而不是总数。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:0)

您有两个选项,要么使用Collection::map之类的内容获取所有相关注释并在php中截断,要么使用complex sub-query

替换急切加载

答案 1 :(得分:0)

Laravel中没有对此的本地支持。

我为此创建了一个包:https://github.com/staudenmeir/eloquent-eager-limit

在父模型和相关模型中都使用HasEagerLimit特性。

class Consultant extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

class Treatment extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

然后,您可以将->take(3)应用于您的关系。

答案 2 :(得分:-1)

试试这个

Clinic::where('user_id', Auth::id()) 
->with(['consultants' => function ($query) { 
    $query
    ->with(['specialism','treatments'])
    ->take(3); 
}]) ->first();

我在打电话。所以请原谅我的代码格式化。