Выполнение запроса через свойство relation в Laravel 4

#laravel #laravel-4 #relationship #foreign-key-relationship

#laravel #laravel-4 #связь #foreign-key-relationship

Вопрос:

У меня есть отношение «Один ко многим» между исполнителем и альбомом, исполнитель может быть связан со многими альбомами, но альбом может быть связан только с одним исполнителем.

Моя модель художника:

 <?php


class Artist extends Eloquent {

  public function albums()
  {
      return $this->hasMany('Album');
  }

}
  

Модель моего альбома:

 <?php


class Album extends Eloquent {

  public function artist()
  {
      return $this->belongsTo('Artist');
  }

}
  

Я узнал, как получить все альбомы исполнителя, а также получить исполнителя альбома. Но я до сих пор не знаю, как выполнить этот запрос:

Получить все альбомы, исполнителем которых является «Linkin Park»

Что я сейчас делаю, так это:

 $artist = Artist::where('name','=','Linkin Park')->first();

$albums = Album::where('artist_id','=',$artist->id)->get(); 
  

Я получаю то, что мне нужно, но мне было интересно, есть ли другой способ сделать это. Что-то вроде (я знаю, что это неправильно):

 $albums = Album::where('artist','=','Linkin Park');
  

Ответ №1:

Неважно, я нашел способ сделать это, просмотрев примеры в официальной документации.

Запрос будет выглядеть следующим образом:

 $albums = Album::whereHas('artist', function($q)
{
    $q->where('name', '=', 'Linkin Park');

})->get();