我有三个模型:驱动程序,名称和dpsObject,具有以下表示形式:
驱动程序-> hasMany(dpsObject)
驱动程序->属于(指定)
名称-> hasMany(驱动程序)
dpsObject-> belongsTo(Driver)
我正在尝试编写查询以返回与三个用户输入值相对应的dpsObject记录列表:日期范围(从和到)保存dpsObject中的EntryDate字段的值和指定输入,在Designation对象中保存Designation_name字段的值。
当前这是我的查询:
$dps = dpsObject::where([['entryDate', '>=', $from],
['entryDate', '<=', $to]]);
$ from和$用来保存从用户表单提交的请求值。
我需要完成查询以捕获具有dpsObject记录的驱动程序的名称。挑战在于,dpsObject模型上不存在designation_name字段,而仅在驱动程序和名称模型上存在。这就是我想要维护数据库模型的方式。我想我需要使用联接或类似方法,但是我不确定该怎么做。
编写此类查询的最佳方法是什么?
亲切的问候
最佳答案
您可以使用嵌套的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()
关系。关于mysql - Eloquent 查询,可能的加入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45128961/