我在使用Laravel模型时遇到了正确的计数问题。
模型结构
用户可以拥有多个商品,并且每个商品都可以有多个商品喜欢(当用户喜欢该商品时)。
使用Item模型时,我可以轻松获得单独的ItemLike计数:
return $this->itemLikes()->count();
但是,我无法弄清楚如何获得用户拥有的所有项目所拥有的项目总数#。
示例
用户A有3个项目。每个项目有5个项目,总共15个。
我尝试在User模型上使用eager loading,如下所示:
return $this->items()->with('itemlikes')->get()->count();
但是返回 3 (项目数量)
这些是它运行的查询,看起来第二个查询是我想要的,但是我尝试的每一种方式我仍然得到 3 而不是 15 < / p>
select * from `items` where `items`.`user_id` = '1000'
select * from `item_likes` where `item_likes`.`item_id` in ('1000', '1001', '1002')
答案 0 :(得分:1)
在得到其他人的建议后,我找到了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
答案 1 :(得分:0)
仅仅是创建一个可以返回模型项目数的方法的情况。 e.g:
#UserModel
public function nbLikes()
{
$nbLikes = 0;
foreach($this->items() as $item) {
$nbLikes += $item->itemLikes()->count();
}
return $nbLikes;
}
然后User :: nbLikes()应该返回您要查找的数据?
答案 2 :(得分:-1)
试试这个: $ query =“select count(il.id)from item_likes il,item itm where il.item_id = itm.id and tm.user_id = 1000”;