我需要计算每个相册中的图像数量

时间:2019-04-29 15:32:29

标签: php laravel join

我需要显示用户的每个相册的图像数量。为此,我假设我需要另一个联接或子查询,但是我无法获得想要的结果。

$userId = auth()->user()->id;
$albums = DB::table('users_albums')
        ->join('albums', 'users_albums.albumId', '=', 'albums.id')
        ->where('users_albums.userId', $userId)
        ->select('albums.name', 
            'albums.owner', 
            'albums.id', 
            'albums.created_at')
        ->get();

数据库结构:

编辑:添加了以下代码,它可以正常工作。现在的问题是性能,但主要问题已解决!

DB::raw('(SELECT 
    COUNT(I.id) 
FROM 
    images I
WHERE
    I.albumId = albums.id) as numberOfImages')

1 个答案:

答案 0 :(得分:0)

如果您使用的是Eloquent和Models,则可以使用->count()轻松地做到这一点。

如果没有口才,您可以按照以下方式进行调查:

(这些显然不是您所需要的,但应该引导您走正确的路)

$album = DB::table('albums')->first();
$image_count = DB::table('images')->where('album_id', $album->id)->count();

更多“雄辩”的方式:

// Album model:

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

public function getImageCount()
{
    return $this->images->count();
}

// Controller

$first_album = auth()->user()->albums->first();
$album_image_count = $first_album->getImageCount();

hasManyThrough()是您不应该忽略的另一种口才:)