Laravel 3 Eloquent ORM для трехуровневого отношения & amp; фильтр

У меня было 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 | название
мастер таблица всех названий отрасли
например. Сервис, Мода и др.

-1

Решение

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;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]