【问题标题】:Counting a many to many relationship?计算多对多关系?
【发布时间】:2015-08-11 00:53:58
【问题描述】:

我在用户和图像之间有多对多的关系。

用户模型

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();

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

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

【问题讨论】:

  • $module =Image::with('user')->get(); $module->user->count();
  • $module=Image::with('user')->get(); $module->count();
  • 谢谢@kamlesh.bar 但我希望在同一个查询中完成所有操作?
  • 你应该可以上链了。
  • Image::with('user')->find(1)->user()->count();

标签: laravel laravel-4 eloquent laravel-5


【解决方案1】:

你可以这样做:

$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 模型中添加几行来创建“自定义”属性:

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

然后像这样使用它:

$image->favourites;

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

【讨论】:

  • 谢谢,作为访问者,每次调用 eloquent 时计数都会出来?这不是浪费吗?
  • 计数就是简单的php函数。它不会每次都执行一次sql查询。
  • 所以每次我调用模型时,php 都会进行计数吗?这就是我所说的浪费 - 例如,我不需要对 all() 进行计数。
猜你喜欢
  • 2016-11-03
  • 2016-11-19
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多