Laravel 急切加载功能限制

2 php eager-loading laravel laravel-5.3

我有工作职能,但是,我想限制每位顾问返回的治疗数量。

工作示例:

Clinic::where('user_id', Auth::id())
            ->with('consultants.specialism', 'consultants.treatments')
            ->first();
Run Code Online (Sandbox Code Playgroud)

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

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

不幸的是,takeorlimit函数将其限制为返回的处理总数。

我希望将每位顾问的治疗次数限制为最多 3 次,而不是总数。

请问我怎样才能实现这个目标?

Jon*_*eir 6

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;
}
Run Code Online (Sandbox Code Playgroud)

然后简单地链接->take(3)调用您的急切加载查询(似乎您已经这样做了)。