Laravel 5.4 - 从连接表返回单行

时间:2017-08-27 10:03:23

标签: php mysql laravel laravel-5 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

2 个答案:

答案 0 :(得分:0)

form { display: inline; font-size: 0; } 替换为get(),因为get返回一个对象实例,首先会返回一个实例;

first()

答案 1 :(得分:0)

为什么不以Laravel方式而不是原始数据库查询?这样做有一个技巧。首先在您的相册模型中添加一个方法(我使用latest()但您可能要执行oldest()或其他限制described in the docs ):

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

现在你可以做到:

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