2015-04-15 6 views
1

Я пытаюсь вернуть вложенный ответ JSON, нужно подключить несколько таблиц, но пока я просто пытаюсь с 3, уровни могут идти глубже. Мои модели являются следующие:Laravel Eloquent nesting

Update # 1:

class Sport extends Eloquent { 

protected $table = 'sportovi'; 

protected $fillable = ['id', 'sport_eng']; 

public $timestamps = false; 

public function liga(){ 
    return $this->hasMany('League', 'sport_id'); 
} 
} 

class League extends Eloquent { 

protected $table = 'lige'; 

protected $fillable = ['league_id', 'liga', 'sport_id']; 

public $timestamps = true; 

public function mec(){ 
    return $this->hasMany('Match', 'match_id'); 
} 

} 

class Match extends Eloquent { 

protected $table = 'mecevi'; 

protected $fillable = ['match_id', 'home', 'away', 'kotime', 'day', 'kolo', 'sport_id', 'league_id', 'date', 'long_id']; 

public $timestamps = false; 

public function liga(){ 
    return $this->belongsTo('Match', 'league_id'); 
} 

} 

Если я:

$sportovi = Sport::with('liga')->get(); 
return $sportovi; 

все нормально, дети "Lige" вложены, где они должны быть, как показано на ссылка here, но, если я пытаюсь добавить матч, как это:

$mecevi = Sport::with('liga.mec')->get(); 

я получаю «тес» узел, который является пустым массивом, как показано here, вместо этого на один уровень глубже, как в предыдущем примере.

Я также попытался сделать несколько с() условия, которые выдает ошибку Вызов неопределенной метод Осветите \ Database \ Query \ Builder :: MEC()

Обновление: Тем не менее то же самое, mec:[], пустой массив.

Я использую Laravel 4.2.

+0

Что произойдет, если вы сделаете это: Leage :: first() -> mec; ? –

+0

То же, что и спорт :: с ('liga') -> get(); –

+0

С первого изображения, почему у вас есть как 'id', так и' leaque_id'? какую колонку вы используете для отношений между «Лигой-> Матчем»? – mininoz

ответ

0

Понял, мои отношения с таблицей были отключены, после того, как были заданы все условия, например return $this->hasMany('Comment', 'foreign_key', 'local_key'); все начиналось как должно. Спасибо всем.

1

Из моего понимания, вы хотите, чтобы получить все matches из leagues

Проблема может быть в качестве второго параметра в hasMany функции

public function mec(){ 
    return $this->hasMany('Match', 'league_id'); 
} 

Второй параметр должен быть foreign_key

public function mec(){ 
    return $this->hasMany('Match', 'match_id', 'league_id'); 
} 

источник: http://laravel.com/docs/4.2/eloquent#one-to-many

+0

Что-то вроде этого, я хочу, чтобы все матчи всех лиг все виды спорта, поэтому иерархия - это спортивные состязания -> лиги->. У него может быть меньше, потому что в каждом матче есть группа результатов и т. Д. И т. Д. Я пытался переключиться с '' league_id'' на '' match_id'', но ничего не происходит, в сгенерированном JSON mec все еще просто 'mec: []' –

+0

То, что я на самом деле делаю, - это получение данных в та же структура, в которой она появилась, вначале, я разбираю этот большой XML-файл, записывая значения в БД, и теперь я извлекаю его как JSON, и для этого требуется такая древовидная структура, потому что рекурсии, генерируя html от каждого узла. Возможно ли то же самое с создателем запросов Laravel? Это не нужно делать с Красноречивым. –

+0

Это должно быть сделано с Красноречивым. Я только что обновил свой ответ. Кажется, вы можете использовать 'leaque_id' в модели' League' для отношений. – mininoz