是否有可能检索hasMany
父模型的通过同级模型的belongsTo
的关系的关系。我有以下Models
:
汽车
public function wheels() {
return $this->hasMany('App\Models\Wheel');
}
public function seats() {
return $this->hasMany('App\Models\Seat');
}
轮式
// @property int|null $car_id Type: int(10) unsigned, Extra: , Default: null, Key: MUL
public function car() {
return $this->belongsTo('App\Models\Car');
}
座位
// @property int|null $car_id Type: int(10) unsigned, Extra: , Default: null, Key: MUL
public function car() {
return $this->belongsTo('App\Models\Car');
}
我想这样做的是找回车子的车轮给予座椅($seat->wheels
):
座位
public function car() {
return $this->belongsTo('App\Models\Car');
}
public function wheels() {
// Works
// return $this->car->wheels;
// What I would like to do, but doesn't work
return $this->hasManyThrough('App\Models\Wheel', 'App\Models\Car');
}
答案 0 :(得分:2)
默认情况下,HasManyThrough
是两个HasMany
的关系的组合。
在这种情况下,您必须切换第一个外键和本地键:
public function wheels() {
return $this->hasManyThrough('App\Models\Wheel', 'App\Models\Car', 'id', null, 'car_id');
}
Laravel 5.8中将解决列覆盖问题:https://github.com/laravel/framework/pull/25812
同时,您可以使用BelongsToMany
关系:
public function wheels() {
return $this->belongsToMany(Wheel::class, 'cars', 'id', 'id', 'car_id', 'car_id');
}