gpt4 book ai didi

php - 在 Laravel 的 withCount() 方法中使用 DISTINCT

转载 作者:行者123 更新时间:2023-12-03 18:32:18 28 4
gpt4 key购买 nike

使用 Laravel/Lumen eloquent 我可以得到这样的计数关系:

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 列计算这些 View 。在这个查询中,我可以像这样简单地用 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 eloquent 中实现这一点呢?我找不到任何使用自定义列进行计数的方法。我可以通过这样的查询函数传递数组:
User::withCount(['views' => function ($q) { // what there? }])->get();

但现在我只能通过 where 条件,不能以任何方式使用 Distinct。

我知道我可以先获取模型,然后使用 distinct 和 count 或 groupby 进行 foreach 但我需要保持这个单一的查询,快速而简单。如果我可以在原始 SQL 中轻松实现这一点,那么我也应该以某种方式在 Laravel 中做到这一点。
如果需要,我可以使用一些自定义的 eloquent 方法,因为我将在应用程序的许多地方使用这个唯一计数。

这么短的问题 - 如何结合 withCount 和 Distinct?

PS我也尝试在模型的关系级别(在hasMany上)使用distinct或groupBy,但这不起作用。

最佳答案

User::withCount('views', function($query) {
$query->select(DB::raw('count(distinct(ip))'));
})->get();

关于php - 在 Laravel 的 withCount() 方法中使用 DISTINCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914631/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com