我有三个模型:驱动程序,名称和dpsObject,具有以下重新选择:
驾驶员 - >的hasMany(dpsObject) 驾驶员 - >属于关联(指定)
指示 - >的hasMany(驱动程序)
dpsObject->属于关联(驱动程序)
我尝试编写查询以返回与三个用户输入的值对应的dpsObject记录列表,这些记录是:日期范围(From和To),其中包含EntryDate字段的值dpsObject和Designation输入,保存Designation对象中Designation_name字段的值。 目前这是我的查询:
$dps = dpsObject::where([['entryDate', '>=', $from],
['entryDate', '<=', $to]]);
$ from和$来保存表单用户提交的请求值。 我需要完成查询以捕获具有dpsObject记录的驱动程序的名称。挑战在于,dpsObject模型上不存在designation_name字段,而是仅存在于驱动程序和指定模型上。这就是我想要维护数据库模型的方式。我想我需要使用联接或类似的东西,但我不确定如何去做。
编写此类查询的最佳方法是什么?
亲切的问候
答案 0 :(得分:0)
您可以使用嵌套的whereHas()
:
$dpsObjects = dpsObject::whereBetween('entryDate', [$from, $to])
->whereHas('driver', function ($q) use($designationName) {
$q->whereHas('designation', function ($q) use($designationName) {
$q->where('designation_name', $designationName);
});
})
->get();
此处,designation
和driver
是belongsTo()
关系。