Laravel的hasMany通过属于关联关系

时间:2019-02-02 22:25:56

标签: laravel eloquent has-many-through

是否有可能检索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');
}

1 个答案:

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