php - 计算 Laravel 中的远程关系总数(急切加载?)

标签 php mysql laravel eager-loading

我在使用 Laravel 模型获取正确的计数总数时遇到问题。

模型结构

  • 用户
  • 项目
  • 类似项目

一个用户可以拥有多个项目,并且每个项目都可以有多个 ItemLike(当用户“喜欢”该项目时)。

使用 Item 模型时,我可以轻松获取各个 ItemLike 计数:

return $this->itemLikes()->count();

但我不知道如何获取用户拥有的所有 Item 中 ItemLike 的总数。

示例

用户 A 有 3 个项目。每个项目有 5 个 ItemLike,总共 15 个。

我尝试在用户模型上使用预先加载,如下所示:

return $this->items()->with('itemlikes')->get()->count();

但这会返回3(项目数)

这些是它运行的查询,看起来第二个查询就是我想要的查询,但我尝试的每一种方式仍然得到 3 而不是 15

select * from `items` where `items`.`user_id` = '1000'
select * from `item_likes` where `item_likes`.`item_id` in ('1000', '1001', '1002')

最佳答案

根据其他人的建议,我找到了 2 个解决方案来获得结果。

使用whereIn:

$itemViewCount = ItemView::
whereIn('item_views.item_id', $this->items()->lists('id'))
->count();

return $itemViewCount;

2次查询总共410μs

使用连接:

$itemViewCount = $this->items()
->join('item_views', 'item_views.item_id', '=', 'items.id')
->count();

return $itemViewCount;

2次查询总共600μs

关于php - 计算 Laravel 中的远程关系总数(急切加载?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477899/

相关文章:

PHP 循环不会遍历每一行

php - 如何在 laravel 5 Controller 中独立设置 cookie

Laravel - PopityCount 属性 - 排序依据

php - 从不同的 Controller 输出到相同的 View

php - Paypal 结帐回调 url 以在 1x1 img 中显示唯一的销售 ID 以进行跟踪

php - 如何使用 Eloquent/Laravel 执行此查询 : subquery WHERE IN with GROUP BY

具有日期范围和时间步长的 MySQL 查询性能

mysql - 带破折号的子字符串索引

php - 如何防止php/mysql中的重复用户名

php - 在用户的时区(Laravel)中显示模型上的所有日期