У меня было 3 модели:
модель А:
class A extends \Eloquent {
...
public function Bs() {
return $this->belongsTo('B','B_id','id');
}
public function Xs() {
return $this->belongsTo('X','X_id','id');
}
public function Ys() {
return $this->belongsTo('Y','Y_id','id');
}
...
}
модель Б:
class B extends \Eloquent {
...
public function As()
{
return $this->hasMany('A');
}
public function Cs()
{
return $this->hasMany('C');
}
...
}
модель С:
class c extends \Eloquent {
...
public function Bs()
{
return $this->belongsTo('B','B_id','id');
}
public function Zs()
{
return $this->belongsTo('Z','Z_id','id');
}
...
}
Мне нужны все данные с фильтрами по X, Y и Z. Затем я добавил hasManyThrough()
в С как это;
модель С:
class c extends \Eloquent {
...
public function Bs()
{
return $this->belongsTo('B','B_id','id');
}
public function Zs()
{
return $this->belongsTo('Z','Z_id','id');
}
public function As()
{
return $this->hasManyThrough('A','B','id','B_id');
}
...
}
Но когда я получаю данные, используя контроллер, как это:
public function index()
{
$output=C::where('Z_id','=',Input::get('Z'))
->with('As');
...
}
Это дает мне пустое место для Как
[As] => Array
(
}
***** РЕДАКТИРОВАТЬ 1 ******
Детали таблицы
Вот они
Таблица А | Открытие вакансии | id | название | city_id | тип | Идентификатор компании
Таблица Б | Компания | id | имя | адрес веб-сайта
Компания имеет много вакансий
Таблица С | Индустрия компании | id | тип | company_id | industry_id
И может быть частью многих отраслей промышленности.
тип 1 или 2, где 1 означает основной, а 2 означает другой
Таблица D | Промышленность | id | название
мастер таблица всех названий отрасли
например. Сервис, Мода и др.
3-й параметр hasManyThrough
является внешним ключом близкой связанной модели (B
здесь), так что это то, что вам нужно:
public function As()
{
return $this->hasManyThrough('A','B','C_id','B_id');
}
Однако, согласно комментариям, hasManyThrough
работает на A hasOne/hasMany B, B hasOne/hasMany C
только. Так что в вашем случае вы не можете использовать его.
Вместо этого это то, что вы можете сделать:
$c = C::where('Z_id','=',Input::get('Z'))->first();
$as = $c->b->as;
Других решений пока нет …