如果评论user_id = $ id,我希望获得所有项目(主题)及其评论.我尝试这样的东西,但它不起作用.因此,如果Item没有得到user_id = $ id的任何评论,那么我不需要这个项目.
在DiscussionsItem模型中我有方法:
public function discussionsComments() {
return $this->hasMany('DiscussionsComment', 'discussionsitem_id');
}
Run Code Online (Sandbox Code Playgroud)
我在控制器中的查询是这样的:
$items = DiscussionsItem::whereBrandId($brand_id)
->whereBrandCountryId($country_id)
->with(['discussionsComments' => function($query) use ($id) {
$query->where('user_id', '=', $id);
}])
->whereHas('discussionsComments', function($query) use ($id) {
$query->where('user_id', '=', $id);
})
->with(['views' => function($query) use ($id) {
$query->where('user_id', $id)->count();
}])
->orderBy('created_at', 'DESC')->get();
Run Code Online (Sandbox Code Playgroud)
我的问题是我得到了带注释的项目,其中注释为user_id!= $ id.
PS我需要5条评论,但我无法想象如何做到这一点,因为 - >在我急切的负载中采取(5)是行不通的.
我搞清楚了(工作代码):
$items = DiscussionsItem::whereBrandId($brand_id)
->whereBrandCountryId($country_id)
->whereHas('discussionsComments', function($query) use ($id) {
$query->where('user_id', '=', $id);
})
->with(['views' => function($query) use ($id) {
$query->where('user_id', $id)->count();
}]) …Run Code Online (Sandbox Code Playgroud) $staffGroup = StaffGroup::where('id', $id)
->with('staffGroupRight')
->first();
Run Code Online (Sandbox Code Playgroud)
在StaffGroup Model:
public function staffGroupRight() {
return $this->hasMany('Modules\Staff\Http\Models\StaffGroupRight');
}
Run Code Online (Sandbox Code Playgroud)
public function staffGroupRight() {
return $this->hasMany('Modules\Staff\Http\Models\StaffGroupRight')->take(5);
}
Run Code Online (Sandbox Code Playgroud)
但它总共给出了5行,staff_group但我希望它能limit用于一个staff_group
有10 staff_group则给出了5条的staffgrouprights为10 staff_group,但我想它5单staff_group
这里staffGroupRight返回data适当id的staff group.
但我想limit在那个with()方法数据中设置.
是否有可能limit在with()方法中设置......?
我有工作职能,但是,我想限制每位顾问返回的治疗数量。
工作示例:
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 次,而不是总数。
请问我怎样才能实现这个目标?
使用我们的 User 模型,我们渴望加载对话和这些对话的消息。在每个对话中,我们希望引导最后 25 条消息。所以我们写了下面的查询。
User::where('status', 3)->with(['conversations.messages' => function ($q) {
$q->take(25)->orderBy('created_at', 'DESC');
}])->get();
Run Code Online (Sandbox Code Playgroud)
但是,此函数总共只返回 25 条消息(因此不是每个对话)。即使您有 1000 个用户,它也会加载消息表中的最后 25 条消息,但不会加载用户每个会话的最后 25 条消息。
有没有办法在 Laravel Eloquent 方法中解决这个问题?
eloquent ×3
laravel ×3
constraints ×1
laravel-4 ×1
laravel-5.1 ×1
laravel-5.3 ×1
limit ×1
php ×1