我在使用 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/