获取登录/注销时间

时间:2019-03-24 14:52:33

标签: php laravel

由于某种原因,当我将原始MYSQL放入PHPMYADMIN时,它可以按我期望的方式工作。但是,当我使用Laravel(我看不到为什么不起作用!)时,会出现Syntax error or access violation错误

任何帮助将不胜感激。

Laravel

$timings = DB::table('timings')
                    ->distinct()
                    ->selectRaw("employee_id, min(time_logged) AS minTime, max(time_logged) AS maxTime")
                    ->where('timings.employee_id' , $id)
                    ->groupBy('timings.employee_id', 'cast(time_logged AS date)' )
                    ->get();

原始MYSQL

SELECT DISTINCT employee_id, min(time_logged) AS minTime, max(time_logged) AS maxTime  
FROM timings 
WHERE timings.employee_id = 1
GROUP BY timings.employee_id, cast(time_logged AS date)

2 个答案:

答案 0 :(得分:2)

虽然,不能说不推荐这样做,但绝对不是Laravel风格。

假设您有App\User和和App\Timing。您为什么不使用hasOne连接它们,所以您的计时表如下所示:

| login_time | logout_time | user_id | |------------|-------------|---------| | xx-xx PM | xx-xx PM | 1 | | xx-xx PM | xx-xx AM | 2 |

现在您可以轻松做到了,$user->timings->login_time:)

为什么人们害怕人际关系,您应该尽可能使用它。

答案 1 :(得分:1)

  • 首先,确保您访问数据库的凭据正确(在.env文件中。)
  • 第二,您将需要对列名本身进行运算的表达式使用DB::raw()

因此您的查询如下:

$timings = DB::table('timings')
                    ->distinct()
                    ->selectRaw("employee_id, min(time_logged) AS minTime, max(time_logged) AS maxTime")
                    ->where('timings.employee_id' , $id)
                    ->groupBy('timings.employee_id', DB::raw('cast(time_logged AS date)'))
                    ->get();