【问题标题】:Laravel query countLaravel 查询计数
【发布时间】:2018-12-15 06:23:30
【问题描述】:

我有两个表:rrpps 和一对多关系的客户端。一个 rrpps 有很多客户。 我需要所有 rrpps 的列表和他拥有的客户数量。 我有这个问题:

  $data = DB::table('rrpps')
            ->select('rrpps.*',DB::raw('COUNT(clientes.codRRPP) as total_clientes'))
            ->join('clientes', 'clientes.codRRPP', '=', 'rrpps.codRRPP')
            ->groupBy('rrpps.codRRPP')
            ->get();

但它显示了以下错误

SQLSTATE[42000]:语法错误或访问冲突:1055 'evento.rrpps.nombre' 不在 GROUP BY 中(SQL:选择 rrpps.*, COUNT(clientes.codRRPP) as total_clientes 来自rrpps 内部连接 clientes on clientes.codRRPP = rrpps.codRRPP 分组 rrpps.codRRPP)

名称是 rrpps 的名称。它只适用于指定,但我需要所有 rrpps 数据。我该怎么办?

也就是说,它可以正常工作,但是我需要rrpps的所有字段。

  $data = DB::table('rrpps')
                ->select('rrpps.codRRPP',DB::raw('COUNT(clientes.codRRPP) as total_clientes'))
                ->join('clientes', 'clientes.codRRPP', '=', 'rrpps.codRRPP')
                ->groupBy('rrpps.codRRPP')
                ->get();

提前致谢,

【问题讨论】:

  • 你使用的是什么版本的 Laravel?另外,您是否为这些表设置了雄辩的模型?

标签: laravel eloquent


【解决方案1】:

如果你已经有关系,你不需要使用join。在 get() 之后也移动 groupBy。就这样做 -

$data = DB::table('rrpps')->withCount('clientes')
                 ->get()
                 ->groupBy('rrpps.codRRPP');

您可以使用

访问它
foreach ($data as $dt) {
   echo $dt->clientes_count;
}

【讨论】:

  • 感谢 Amitoz Deol 的回复。我尝试了它的变体,它给了我错误。调用未定义的方法 Illuminate\Database\Query\Builder::withCount()
  • 哦我忘了,你需要使用你的模型类,RRPPS::withCount('clientes')->get()
【解决方案2】:

你需要像这样使用 selectRaw 方法:

$data = DB::table('rrpps')->selectRaw('rrpps.*, COUNT(clientes.codRRPP) as total_clientes') 
    ->join('clientes', 'clientes.codRRPP', '=', 'rrpps.codRRPP')
    ->groupBy('rrpps.codRRPP')
    ->get();

这将允许您在选择中使用原始 SQL,而不是使用 DB::raw()

【讨论】:

  • 感谢乔希的回复。我已经尝试过它的变体,它给了我同样的错误。 SQLSTATE[42000]:语法错误或访问冲突:1055 'evento.rrpps.nombre' 不在 GROUP BY 中(SQL:选择 rrpps.nombre 作为 nnn,COUNT(clientes.codRRPP) 作为来自 rrpps 内连接 @ 的 total_clientes 987654324@ on clientes.codRRPP = rrpps.codRRPP group by rrpps.codRRPP)
  • 尝试更改->groupby(['rrpps.codRRPP', 'clientes.codRRPP'])
  • 乔希,通过将表中的所有字段放入 groupby,查询对我有用。 ->groupby(['rrpps.attr0', 'rrpps.attr1' .....])
  • 嗯,这样也不对。它只返回有客户端的 rrpp,我需要所有的 rrpp
猜你喜欢
  • 2020-09-03
  • 1970-01-01
  • 2016-11-19
  • 2021-11-21
  • 1970-01-01
  • 2021-12-30
  • 2017-09-21
  • 1970-01-01
  • 2013-10-03
相关资源
最近更新 更多