算上多对多的关系?

时间:2015-05-28 13:23:29

标签: laravel laravel-4 eloquent laravel-5

我在用户和图片之间有很多关系。

用户模型

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

图像模型

public function user()
{
    return $this->belongsToMany('\App\User');
}

用户

id | name

图像

id | url

image_user

id | image_id | user_id

当用户“收藏”图像时,它存储在数据透视表中。

id | image_id | user_id
 1      1          1
 2      2          1
 3      1          2

我需要计算每张图片的最爱。

我试着像:

 Image::with('user')->find(1)->count();

但这会计算用户数量,而不是收藏数量。

理想情况下,我想返回所有图像数据以及用户数据的计数 - 我该怎么做?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

$image = Image::with('user')->find(1) // Get the image with user eager loading
$image->name; // Access any attribute
$image->users->count(); // Get the user count

您甚至可以在Image模型中添加几行来创建一个" custom"属性:

public function getFavoritesAttribute()
{
    return count($this->users);
}

然后像这样使用它:

$image->favourites;

这里有一个更详细的解决方案: Laravel many to many loading related models with count