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
我有一个具有相关对象的模型。这些数据本可以存储在同一个模型中,但它驻留在不同的数据库中,该数据库仅用于查找并将其附加到我的模型中。
假设我有以下结构:
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