У Laravel есть много отношений - PullRequest
0 голосов
/ 03 февраля 2019

Возможно ли получить отношение 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 голосов
/ 03 февраля 2019

По умолчанию 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');
}
...