Laravel查询计数

时间:2018-12-06 18:54:10

标签: laravel eloquent

我有两个表: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。*,   来自rrpps内部联接的COUNT(clientes.codRRPP)作为total_clientes   {{1}上的clientesclientes = codRRPPrrpps分组依据   codRRPPrrpps

根据属性归因于rrpps。它只能与指定一起很好地工作,但我需要所有rrpps数据。我该怎么办?

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

codRRPP

预先感谢

2 个答案:

答案 0 :(得分:0)

您需要像这样使用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()

答案 1 :(得分:0)

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

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

您可以使用

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