我有三个模型:驱动程序,名称和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();


在这里,designationdriverbelongsTo()关系。

关于mysql - Eloquent 查询,可能的加入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45128961/

10-10 18:00