2016-12-15 111 views
0

我有问题查询laravel表。Laravel查询关系表

我有这样的关系:每个用户都有附件,并且附件属于用户。我在模型中写了关系。

我的问题是:如何查询,如果我想返回用户与关系附件,但对于附件,其中级别=用户级别?即使我在哪里有回报给我的所有用户附件。请帮忙!

回答

0

当您查询模型关系,你喜欢写东西

$attachments = $userModel->attachments; 

这是

$attachments = $userModel->attachments()->get(); 

一个快捷方式,你可以写

$attachments = $userModel->attachments()->where('level', 'user')->get(); 
+0

好的,但在这种情况下,我必须得到用户第一。我想做一个查询,如:Profile :: with('attachment')。我想获取对象配置文件与相关数据,但不是所有相关的数据,但其中level = user_level –

1

如果你想找到用户卫生组织附件遇到具体限制,然后使用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 constraintswith方法

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(); 
+0

是的这是正确的,但我想返回用户与附件,但不是与所有附件,但与附件其中level = profile_level。我希望现在很清楚 –

+0

我编辑了我的答案。 –

+0

几乎在那里。但是现在我只有附件的对象没有用户信息:(我不知道是否有任何选项可以从后端进行此操作?如果不是,我只是返回用户所有附件,然后在前端获得特定附件。 –

0

您可以结合使用whereHaswith方法作为:

Profile::whereHas('attachments', function ($q) { 
     $q->where('level', 'user'); 
    }) 
    ->with(['attachments', function ($q) { 
     $q->where('level', 'user'); 
    }]) 
    ->get();