用户和图像之间存在多对多关系。
用户模型
public function image()
{
return $this->belongsToMany('\App\Image');
}
图像模型
public function user()
{
return $this->belongsToMany('\App\User');
}
桌子
用户
id | name
图像
id | url
图像_用户
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();
但这计算的是用户数量,而不是收藏数量。
理想情况下,我想返回所有图像数据以及用户数据计数 - 我该怎么做?
你可以这样做:
$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
您甚至可以在图像模型中添加几行来创建“自定义”属性:
public function getFavoritesAttribute()
{
return count($this->users);
}
然后像这样使用它:
$image->favourites;
这里有更详细的解决方案: Laravel 使用 count 多对多加载相关模型
编辑:您现在可以使用 withCount() 方法,该方法将计算相关模型的数量,而无需实际加载它们。
在你的情况下,它看起来像这样:
$image = Image::withCount('user')->find(1)
了解更多详细信息:https://laravel.com/docs/master/eloquent-relationships#counting-lated-models