Laravel 4 и Eloquent: получение всех записей и всех связанных записей
У меня есть два класса:Artist
а такжеInstrument
, каждыйArtist
может играть один или несколькоInstrument
s. И каждыйInstrument
может быть назначен одному или несколькимArtist
s. Итак, я настроил следующие классы:
Artist.php
public function instruments() {
return $this->belongsToMany('App\Models\Instrument');
}
Instrument.php
public function artists() {
return $this->belongsToMany('\App\Models\Artist');
}
Тогда у меня есть три таблицы базы данных:
artists: id, firstname, lastname, (timestamps)
instruments: id, name
artist_instrument: id, artist_id, instrument_id
Я могу успешно получитьодин художник и связанные с ним инструменты, такие как:
ArtistController.php
$artist = Artist::find($artist_id);
$instruments = $artist->instruments()->get();
return \View::make('artists')->with('artists', $artists)->with('instruments', $instruments);
У меня есть 3 вопроса:
На мой взгляд, я могу вывести$artist
лайк:
{{ $artist->firstname }}
и я могу перебрать$instruments
лайк:
@foreach ($instruments as $instrument)
<h2>{{ $instrument->name }}</h2>
@endforeach
но можно ли перебирать$artist
(Я знаю, что есть только один - см. № 2) и для каждого$artist
перебирать их$instruments
?
В моем контроллере, как бы я получитьвсе артисты и для каждого из них их связанные инструменты с конечной целью итерации по ним, на мой взгляд, как описано в # 1.
Можно ли получить только определенные столбцы в приведенном выше примереArtistController.php
? Я пробовал это:
$artist = Artist::where('id', $artist_id)->get('firstname');
$instruments = $artist->instruments()->get();
return \View::make('artists')->with('artists', $artists)->with('instruments', $instruments);
но я получаю сообщение об ошибкеCollection::instruments()
не определено
Я предполагаю, что что-то не так в моих модельных отношениях. Я также попытался определить мои отношения вArtist.php сhasMany
(Я думаю, что имеет больше смысла говорить «У каждого исполнителя есть много инструментов», но это дает мне ошибку, потому что ожидает таблицу с именемartists_instruments
и он также пытается получить столбцы, которые не существуют в этой таблице (например,name
).