凭借Laravel / Lumen的雄辩,我可以获得这样的计数关系:
User::withCount('views')->get();
这将使用SQL
select `users`.*, (select count(*) from `views` where `users`.`id` = `views`.`user_id`) as `views_count` from `users`
并返回所有带有views_count属性的模型,很好。
但是我需要用唯一IP列来计算这些视图。在此查询中,我可以像这样简单地用count(DISTINCT ip)替换count(*):
select `users`.*, (select count(DISTINCT ip) from `views` where `users`.`id` = `views`.`user_id`) as `views_count` from `users`
并在phpMyAdmin中返回良好的结果。但是如何在Laravel中雄辩地做到这一点呢?我找不到任何使用自定义列进行计数的方法。我可以通过带有查询功能的数组传递这样的信息:
User::withCount(['views' => function ($q) { // what there? }])->get();
但是现在我只能在有条件的地方通过,而不能以任何方式使用Distinct。
我知道我可以先获得模型,然后使用不重复和计数或分组依据进行foreach,但我需要保持此单个查询的快速和简单。如果我可以轻松地在原始SQL中实现这一点,那么我也应该以某种方式在Laravel中做到这一点。 如果需要,我可以使用一些自定义的雄辩方法,因为我将在应用程序的许多地方使用此唯一计数。
这么简短的问题-如何与count和Distinct相结合?
PS我还尝试在模型的关系级别(在hasMany上)上使用distinct或groupBy,但这不起作用。
答案 0 :(得分:1)
ActiveWorkbook.Name