2017-08-27 73 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?還是有另一種方法來做到這一點?感謝名單。

Reslut

回答

0

爲什麼不用Laravel的方式做事情而不是原始的DB查詢?有這樣一個竅門。首先在你的相冊樣板,添加一個方法(我用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

更換get()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

通過專輯添加griup或在相冊模型中創建一個函數以獲取每張專輯中的第一張圖片 –