Laravel 通过一个相关模型查询模型

Laravel query a Model over one of it's related models

我有一个具有相关对象的模型。这些数据本可以存储在同一个模型中,但它驻留在不同的数据库中,该数据库仅用于查找并将其附加到我的模型中。

假设我有以下结构: BaseModel->AttachedModel

我想获得所有具有某些条件的附加模型,但是通过 BaseModel,因为我需要更多的对象附加到 BaseModel。

我尝试使用 BaseModel::where('attachedmodel.id', 100)->get() 实现此目的(因为这看起来像 with() 方法,我希望它能起作用)

在这种情况下,我试图获取所有存在 ID 为 100 的 AttachedModel 的 BaseModel。但这失败了。

这可以做到吗,还是我应该为此使用原始查询?

试试这个:

BaseModel::with(['attachedmodel' => function($query) {
    $query->where('id', '100');
}])->get()

with() 方法将预先加载关系而不过滤任何结果。您需要的是 whereHas 查询,它根据相关模型的条件过滤结果。

$lookingForId = 100;
Basemodel::whereHas('attachedmodels', function ($query) use ($lookingForId) {
  $query->where('id', '=', $lookingForId);
})->get();

whereHas() 第一个参数(在上面的代码中是 'attachedmodels'),应该是关系的名称,如定义到您的模型 class