复杂的Laravel Query会挂起一个查询

时间:2014-05-28 22:35:49

标签: php mysql laravel query-builder

现在我希望在表recibo的idEmpleado分组的列中包含Sueldo的总和。我不确定我是否可以将DB::table放在左连接中。如果不是,我怎么能在查询中调用该表来与emp​​leado的信息进行连接。

这是我到目前为止所拥有的

$pagos = DB::table('empleado')
            ->leftJoin('empresa', 'empresa.idEmpresa', '=', 'empleado.emp_idEmpresa_FK')
            ->leftJoin('departamento', 'departamento.idDepartamento', '=', 'empleado.emp_idDeparameto_FK')
            ->leftJoin('tipoperiodo', 'tipoperiodo.idTipoPeriodo', '=', 'empleado.emp_idTipoPeriodo_FK')
            ->leftJoin(
                DB::table('recibos')
                ->leftJoin('empleado', 'empleado.idEmpleado', '=', 'recibos.rec_idEmpleado_FK')
                ->select(DB::raw('idRecibos, rec_idEmpleado_FK, SUM(SueldoBase) as Restante'))
                ->groupBy('rec_idEmpleado_FK')
                ->get()
                ,'recibos', 'recibos.rec_idEmpleado_FK', '=', 'empleado.idEmpleado')
            ->select('idEmpleado', 'Nombre', 'Nombre_Depto', 'Nombre_Empresa', 'Puesto', 'SueldoBase', 'Restante')
            ->get();

我收到错误ErrorException并收到消息:

  

数组到字符串转换

我想是的,因为我试图制作一个leftjoin的查询。 Dunno Im对此有所了解。有什么建议吗?

借助于commnets中的答案,我得到了这个查询,

DB::table('empleado')
            ->leftJoin('empresa', 'empresa.idEmpresa', '=', 'empleado.emp_idEmpresa_FK')
            ->leftJoin('departamento', 'departamento.idDepartamento', '=', 'empleado.emp_idDeparameto_FK')
            ->leftJoin('tipoperiodo', 'tipoperiodo.idTipoPeriodo', '=', 'empleado.emp_idTipoPeriodo_FK')
            ->leftjoin(
                    DB::raw('SELECT rec_idEmpleado_FK, SUM( SueldoBase ) AS Restante
                    FROM `recibos`
                    INNER JOIN empleado ON rec_idEmpleado_FK = idEmpleado
                    GROUP BY rec_idEmpleado_FK'), 
                    function($join)
                    {
                        $join->on('idEmpleado', '=', 'rec_idEmpleado_FK');
                    })
            ->select('idEmpleado', 'Nombre', 'Nombre_Depto', 'Nombre_Empresa', 'Puesto', 'SueldoBase', 'Restante')
            ->get();

但仍然得到错误:

查看与您的MySQL服务器版本对应的手册,以便在

附近使用正确的语法
SELECT rec_idEmpleado_FK, SUM( SueldoBase ) AS Restante
FROM `recibos`

任何想法为什么?

1 个答案:

答案 0 :(得分:0)

好的,我终于得到了答案。我忘了把名字放在内部查询这里是我的答案。我希望它有所帮助。我的答案基于切尔西给我的链接。谢谢

$pagos = DB::table('empleado')
            ->leftJoin('empresa', 'empresa.idEmpresa', '=', 'empleado.emp_idEmpresa_FK')
            ->leftJoin('departamento', 'departamento.idDepartamento', '=', 'empleado.emp_idDeparameto_FK')
            ->leftJoin('tipoperiodo', 'tipoperiodo.idTipoPeriodo', '=', 'empleado.emp_idTipoPeriodo_FK')
            ->leftjoin(
                    DB::raw('(SELECT rec_idEmpleado_FK, SUM( SueldoBase ) AS Restante
                    FROM `recibos`
                    INNER JOIN empleado ON rec_idEmpleado_FK = idEmpleado
                    GROUP BY rec_idEmpleado_FK) AS recibos1'), 
                    function($join)
                    {
                        $join->on('idEmpleado', '=', 'rec_idEmpleado_FK');
                    })
            ->select('idEmpleado', 'Nombre', 'Nombre_Depto', 'Nombre_Empresa', 'Puesto', 'SueldoBase', 'Restante')
            ->get();