我有一个工作职能,但是,我想限制每位顾问的治疗次数。
工作示例:
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();
不幸的是,take
或limit
功能将其限制为返回的治疗总数。
我希望将每位顾问的治疗方法限制在a 最多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();
我在打电话。所以请原谅我的代码格式化。