使用if和sum进行Laravel查询

时间:2014-11-03 20:43:34

标签: php mysql laravel-4

我有两个名为 trabajos tecnicos 的表。

Trabajos表: id | tecnico_id | fecha_ingreso | hora_ingreso | fecha_egreso | hora_egreso

Tecnicos表 id |农布雷

注意: fecha_ingreso 是收到作品的日期。 hora_ingreso 是收到作品的时间。 fecha_egreso 是工作完成的日期。 hora_egreso 是工作完成的时间。这些细节是字符串。

我需要使用以下格式创建一个数组:

Array
(
[0] => Array
    (
        [tecnico] => Pedro
        [good] => 15
        [bad] => 2
    )

[1] => Array
    (
        [tecnico] => Juan
        [good] => 19
        [bad] => 3
    )

[2] => Array
    (
        [tecnico] => Martin
        [good] => 18
        [bad] => 5
    )

)

技术人员找工作,这份工作有进入日期/时间和完成日期/时间。如果完成的日期/时间比进入的日期/时间多30分钟应该加1到坏,但总是1好。该数组应按技术名称分组。

这是我的疑问:

$trabajos = DB::table('trabajos')
    ->join('tecnicos', 'trabajos.responsable_diagnostico', '=', 'tecnicos.id')
    ->where('trabajos.created_at', '>=', $desde4, 'and', 'trabajos.created_at', '<=', $hasta4)
    ->select(DB::raw('tecnicos.nombre', 
        SUM(if(TIMEDIFF(STR_TO_DATE(CONCAT('trabajos.fecha_egreso', ' ', 'trabajos.hora_egreso'), '%d/%m/%Y %H:%i'),
        STR_TO_DATE(CONCAT('trabajos.fecha_ingreso', ' ', 'trabajos.hora_ingreso'), '%d/%m/%Y %H:%i'))<'00:30:00',1,0) as good,
        SUM(if(TIMEDIFF(STR_TO_DATE(CONCAT('trabajos.fecha_egreso', ' ', 'trabajos.hora_egreso'), '%d/%m/%Y %H:%i'),
        STR_TO_DATE(CONCAT('trabajos.fecha_ingreso', ' ', 'trabajos.hora_ingreso'), '%d/%m/%Y %H:%i'))<'00:30:00',0,1) as bad))
    ->groupBy('tecnicos.nombre')
    ->get();

此查询在第一个IF中显示此错误:

syntax error, unexpected 'if' (T_IF), expecting ')'

你能帮我找到错误吗?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您必须将整个DB::raw字符串括在引号中:

$trabajos = DB::table('trabajos')
    ->join('tecnicos', 'trabajos.responsable_diagnostico', '=', 'tecnicos.id')
    ->where('trabajos.created_at', '>=', 'created')
    ->where('trabajos.created_at', '<=', 'created')
    ->select(DB::raw("tecnicos.nombre,
        SUM(if(TIMEDIFF(STR_TO_DATE(CONCAT('trabajos.fecha_egreso', ' ', 'trabajos.hora_egreso'), '%d/%m/%Y %H:%i'),
        STR_TO_DATE(CONCAT('trabajos.fecha_ingreso', ' ', 'trabajos.hora_ingreso'), '%d/%m/%Y %H:%i'))<'00:30:00',1,0)) as good,
        SUM(if(TIMEDIFF(STR_TO_DATE(CONCAT('trabajos.fecha_egreso', ' ', 'trabajos.hora_egreso'), '%d/%m/%Y %H:%i'),
        STR_TO_DATE(CONCAT('trabajos.fecha_ingreso', ' ', 'trabajos.hora_ingreso'), '%d/%m/%Y %H:%i'))<'00:30:00',0,1)) as bad"))
    ->groupBy('tecnicos.nombre')
    ->toSql();

你错误地关闭了'tecnicos.nombre',之后的引号,并且PHP引发了语法错误,因为它正在尝试评估应该在SQL查询中的if语句。