Laravel 对关系表的查询

Mat*_*eta 1 php mysql relation laravel

我在查询 Laravel 表时遇到问题。

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

我的问题是:如果我想返回带有关系附件的用户但对于级别 = 用户级别的附件,如何进行查询?即使我制作 whereHas 它也会为我返回用户的所有附件。请帮忙!

Mat*_*ost 5

如果您想查找附件满足特定约束的用户,请使用whereHas方法

UserModel::whereHas('attachments', function ($attachmentQuery) {
    $attachmentQuery->where('level', 'profile_level');
})->get();
Run Code Online (Sandbox Code Playgroud)

如果你想从已经查询的模型中获取特定的附件然后写

$userModel->attachments()->where('level', 'profile_level')->get();
Run Code Online (Sandbox Code Playgroud)

一次查询不可能同时查询 UserModel 和 AttachementModel,它必须至少是两个查询。即使UserModel::with('attachments')->get();是返回带有所有附件的用户的fancy ,也会在内部执行两个查询。

编辑:

我注意到您可以在方法中定义关系约束with

UserModel::with(['attachments' => function ($attachmentQuery) {
    $attachmentQuery->where('level', 'profile_level');
}])->get();
Run Code Online (Sandbox Code Playgroud)

因此,如果您想找到附件满足特定约束的用户并急切加载该附件,那么您可以这样做

$queryAttachments = function ($attachmentQuery) {
    $attachmentQuery->where('level', 'profile_level');
};

UserModel::whereHas('attachments', $queryAttachments)
->with(['attachments' => $queryAttachments])->get();
Run Code Online (Sandbox Code Playgroud)