我有两个表: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}上的clientes
。clientes
=codRRPP
。rrpps
分组依据codRRPP
。rrpps
)
根据属性归因于rrpps。它只能与指定一起很好地工作,但我需要所有rrpps数据。我该怎么办?
也就是说,它可以正常工作,但是我需要rrpps的所有字段。
codRRPP
预先感谢
答案 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;
}