我有两个名为trabajos和tecnicos的表。
Trabajos表:id | tecnico_id | fecha_ingreso | hora_igreso | fecha_egreso | hora_egreso
Tecnicos表id | nombre
注:fecha_ingreso是收到作品的日期hora_igreso是接收作品的时间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 ')'
你能帮我找出错误吗?非常感谢你的帮助。
您必须将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
语句。