我有问题查询laravel表。Laravel查询关系表
我有这样的关系:每个用户都有附件,并且附件属于用户。我在模型中写了关系。
我的问题是:如何查询,如果我想返回用户与关系附件,但对于附件,其中级别=用户级别?即使我在哪里有回报给我的所有用户附件。请帮忙!
我有问题查询laravel表。Laravel查询关系表
我有这样的关系:每个用户都有附件,并且附件属于用户。我在模型中写了关系。
我的问题是:如何查询,如果我想返回用户与关系附件,但对于附件,其中级别=用户级别?即使我在哪里有回报给我的所有用户附件。请帮忙!
当您查询模型关系,你喜欢写东西
$attachments = $userModel->attachments;
这是
$attachments = $userModel->attachments()->get();
一个快捷方式,你可以写
$attachments = $userModel->attachments()->where('level', 'user')->get();
如果你想找到用户卫生组织附件遇到具体限制,然后使用whereHas
方法
UserModel::whereHas('attachments', function ($attachmentQuery) {
$attachmentQuery->where('level', 'profile_level');
})->get();
如果从已经查询模式要得到具体的附件,然后写
$userModel->attachments()->where('level', 'profile_level')->get();
这是不可能的查询两者的usermodel和AttachementModel单查询,它必须至少有两个查询。即使看起来UserModel::with('attachments')->get();
,它返回所有附件的用户,在内部做两个查询。
编辑:
我注意到,你可以定义relation constraints内with
方法
UserModel::with(['attachments' => function ($attachmentQuery) {
$attachmentQuery->where('level', 'profile_level');
}])->get();
所以,如果你想找到用户卫生组织附件满足特定的约束,并渴望载荷的附件,那么你可以做
$queryAttachments = function ($attachmentQuery) {
$attachmentQuery->where('level', 'profile_level');
};
UserModel::whereHas('attachments', $queryAttachments)
->with(['attachments' => $queryAttachments])->get();
是的这是正确的,但我想返回用户与附件,但不是与所有附件,但与附件其中level = profile_level。我希望现在很清楚 –
我编辑了我的答案。 –
几乎在那里。但是现在我只有附件的对象没有用户信息:(我不知道是否有任何选项可以从后端进行此操作?如果不是,我只是返回用户所有附件,然后在前端获得特定附件。 –
您可以结合使用whereHas
和with
方法作为:
Profile::whereHas('attachments', function ($q) {
$q->where('level', 'user');
})
->with(['attachments', function ($q) {
$q->where('level', 'user');
}])
->get();
好的,但在这种情况下,我必须得到用户第一。我想做一个查询,如:Profile :: with('attachment')。我想获取对象配置文件与相关数据,但不是所有相关的数据,但其中level = user_level –