Php Laravel 5有许多逆查询
我有3个型号:汽车、经销商和省 雄辩的关系如下: 属于经销商的车辆 经销商有很多车 该省有许多经销商 经销商所属省份 该省有许多越野车 我想得到一个特定省份的所有车辆,但我的代码需要从车辆模型开始调用,因为我要调用许多过滤器来过滤车辆 我的代码: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);
$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条记录。希望这有帮助!