Eloquent Query,可能加入

时间:2017-07-16 13:08:48

标签: mysql laravel laravel-5 eloquent laravel-eloquent

我有三个模型:驱动程序,名称和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字段,而是仅存在于驱动程序和指定模型上。这就是我想要维护数据库模型的方式。我想我需要使用联接或类似的东西,但我不确定如何去做。

编写此类查询的最佳方法是什么?

亲切的问候

1 个答案:

答案 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();

此处,designationdriverbelongsTo()关系。