Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5有许多逆查询_Php_Mysql_Laravel_Laravel 5_Eloquent - Fatal编程技术网

Php Laravel 5有许多逆查询

Php Laravel 5有许多逆查询,php,mysql,laravel,laravel-5,eloquent,Php,Mysql,Laravel,Laravel 5,Eloquent,我有3个型号:汽车、经销商和省 雄辩的关系如下: 属于经销商的车辆 经销商有很多车 该省有许多经销商 经销商所属省份 该省有许多越野车 我想得到一个特定省份的所有车辆,但我的代码需要从车辆模型开始调用,因为我要调用许多过滤器来过滤车辆 我的代码: $p = 'Alberta'; $d = Vehicle::whereHas('province', function($q) use ($p) { $q->where('province_name', $p);

我有3个型号:汽车、经销商和省

雄辩的关系如下:

属于经销商的车辆

经销商有很多车

该省有许多经销商

经销商所属省份

该省有许多越野车

我想得到一个特定省份的所有车辆,但我的代码需要从车辆模型开始调用,因为我要调用许多过滤器来过滤车辆

我的代码:

    $p = 'Alberta';
    $d = Vehicle::whereHas('province', function($q) use ($p) {
        $q->where('province_name', $p);
        return $q;
    })->get();
    dd($d);
不幸的是,我得到了一个错误

未找到列:“where子句”中的1054个未知列“经销商.省id”(SQL:select*from
车辆
存在的位置(select*from
经销商
省id
=
省id
省名
=阿尔伯塔省))


但“经销商”表中确实存在“省id”列。我怎样才能使它工作?

这个
HasManyThrough
关系没有反向关系。您所在的省份可以通过经销商拥有许多车辆,但您的车辆不属于某个省份。您的车辆属于某个省的经销商

因此,
whereHas
需要指定嵌套关系:

$p = 'Alberta';
$d = Vehicle::whereHas('dealer.province', function($q) use ($p) {
    return $q->where('province_name', $p);
})->get();
dd($d);

请再问一个问题。你能检查一下这个供参考的信息吗?这个(漂亮的)查询生成了一个“不同”的车辆结果集。例如,假设3辆车符合标准;结果集将只包含1条记录,而不是3条。尽管生成的SQL查询实际上没有指定
DISTINCT()
,但结果是基于条件的
DISTINCT
。更详细地说,结果集并不总是一条记录,但结果集在任何条件下都是不同的。例如,假设您的条件匹配10条具有3个不同值的记录,则结果集将包含3条记录。希望这有帮助!