2017-08-27 7 views
0

モデルアルバム(テーブルアルバム)とモデル写真(テーブル写真)があります。すべてのアルバムをページにフェッチしているとき、各アルバムの最初の写真をアルバムの画像として表示したいと思います。Laravel 5.4 - 結合テーブルから単一行を返します

アルバムモデル:

public function photos() 
{ 
    return $this->hasMany('App\Photo'); 
} 

写真モデル:

public function album() 
{ 
    return $this->belongsTo('App\Album'); 
} 

問合せ:

public function getAlbums() 
{ 
    return DB::table('albums') 
     ->join('photos', 'albums.id', '=', 'photos.album_id') 
     ->select('photos.title', 'albums.title AS album_title', 'albums.slug AS album_slug') 
     ->get(); 
} 

それはアルバムのタイトルを持つすべての写真を返します。各アルバムの最初の写真のみを返すようにクエリを変更するにはどうすればよいですか?結合されたテーブルでLIMIT 1を使用する方法あるいは、これを行う別の方法がありますか? 〜 GETは、オブジェクトインスタンスを返すため

Reslut

答えて

0

未処理のDBクエリではなく、Laravelの方法を使用してください。これを行うには、トリックがあります。まず、あなたのアルバムモデルで、方法(私はlatest()を使用しますが、多分あなたはoldest()、または他のいくつかの制限described in the docs をしたい)を追加します。今、あなたが行うことができます

public function firstPhoto() { 
    return $this->hasOne('App\Photo')->latest(); 
} 

を:

public function getAlbums() { 
    return Albums::with('firstPhoto')->get(); 
} 
+0

ありがとう、ありがとうございました! –

0

最初の単一のインスタンスが返され、first()get()を置き換え、

public function getAlbums() 
{ 
    return DB::table('albums') 
     ->join('photos', 'albums.id', '=', 'photos.album_id') 
     ->select('photos.title', 'albums.title AS album_title', 'albums.slug AS album_slug') 
     ->first() 

} 
+0

それを返します最初の写真で最初のアルバムのみ。私はすべてのアルバムにそれぞれの最初の写真が必要です。 –

+0

アルバムでグリップアップを追加するか、アルバムのモデルで関数を作成して各アルバムの最初の画像を取得します –

関連する問題