我有三种型号: 车辆:
+--------------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| registration | varchar(255) | NO | | NULL | |
| vin | varchar(255) | NO | | NULL | |
| titular_id | int(10) unsigned | NO | | NULL | |
| titular_type | varchar(255) | NO | | NULL | |
| renter_id | int(10) unsigned | NO | | NULL | |
| renter_type | varchar(255) | NO | | NULL | |
+--------------------+------------------+------+-----+---------------------+----------------+
SiretCompanies:
+------------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| siret | varchar(255) | NO | | NULL | |
| siren_company_id | int(10) unsigned | NO | MUL | NULL | |
+------------------+------------------+------+-----+---------------------+----------------+
SirenCompany:
+---------------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| siren | varchar(255) | NO | | NULL | |
+---------------------+------------------+------+-----+---------------------+----------------+
车辆可以通过名义或承租人与SirenCompany相关联。我想要的是获得SirenCompany的所有相关车辆。
在原始MySQL中,这是我的查询:
select count(*) FROM `vehicles`
inner join `siret_companies`
on (
(`vehicles`.`titular_type` = 'SiretCompany' and `vehicles`.`titular_id` = `siret_companies`.`id`)
OR
(`vehicles`.`renter_type` = 'SiretCompany' and `vehicles`.`renter_id` = `siret_companies`.`id`)
)
inner join `siren_companies`
on `siren_companies`.`id` = `siret_companies`.`siren_company_id`
where `siren_companies`.`id` = 410
现在我想做的是将其作为一个Eloquent查询运行,但我似乎无法弄明白。
如果我只考虑名义,我就有这个:
return Vehicle::join('siret_companies',function($join) {
$join
->where('vehicles.titular_type', '=', 'SiretCompany')
->where('vehicles.titular_id','=', 'siret_companies.id');
})
->join('siren_companies', function($join) {
$join->on('siren_companies.id', '=', 'siret_companies.siren_company_id');
})
->where('siren_companies.id','=',$this->id)
->count();
但我似乎无法弄清楚如何编写连接以使其对应于上述查询。
答案 0 :(得分:0)
这就是我提出的
Vehicle::join('siret_companies', function ($q) {
$q->on('vehicles.titular_type', '=', 'SiretCompany');
$q->orOn('vehicles.titular_id','=', 'siret_companies.id');
})->join('siret_companies', function ($q) {
$q->on('siren_companies.id', '=', 'siret_companies.siren_company_id');
})->where('siren_companies.id','=', $id);