【问题标题】:Count user_id in a table in Laravel在 Laravel 的表中计算 user_id
【发布时间】:2021-05-15 06:18:33
【问题描述】:

我想使用以下查询。

SELECT `name`, COUNT(`user_id`) AS total, SUM(`status` = 'Done') as done 
    FROM posts GROUP BY `name`, `user_id`, `status`

但是当我实现这个时......

Post::selectRaw('count(user_id) as total')
    ->selectRaw('SUM(status = "Done") as done')
    ->groupBy('name')
    ->get();

我的数据表没有显示任何数据。我的查询有问题吗?

【问题讨论】:

  • 使用toSql 方法查看构建器生成的查询。
  • laravel 中有一个 sum 和 count 函数(搜索聚合函数 laravel)你可以使用它们,你可以使用这个 ->select(DB::raw('SUM(status = "Done") AS done'))) 前往那些可以帮助你的 2 个答案 Link_1 和 @ 987654322@.

标签: laravel laravel-8 laravel-query-builder


【解决方案1】:

这应该可行:

$posts = DB::table('posts')->select(DB::raw('count(user_id) as total'))->selectRaw('SUM(status = "Done") as done')->groupBy('name')->get();

由于您没有提供有关模型、迁移或逻辑的任何信息,我猜您已正确设置了其他所有内容。

Mohamed Bdr 添加的链接也是很好的示例,我建议您查看它们。

【讨论】:

  • 我在尝试您的代码时遇到此错误undefined property:stdClass::$id
  • 试试 dd($posts) 或 print_r($posts);让我知道会弹出什么
  • 我正在使用 print_r($posts);和显示的页面Illuminate\Support\Collection Object ( [items:protected] => Array ( [0] => stdClass Object ( [total] => 24 [done] => 3 ) ) )
  • 所以 stdClass 只是一个空的类,你可以在需要的时候填充它,你可以在这里阅读更多 link 。在您的实例中,您的计数为 24,总和为 3。您是否传递了任何可能在路由或控制器中干扰的 $id 变量?
  • 啊,是的,我在数据表中为 CRUD 操作传递了 $row->$id,我应该怎么做才能解决这个问题?
猜你喜欢
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 2019-01-18
  • 2021-05-27
相关资源
最近更新 更多