Laravel:联接三个表获取不存在的行

时间:2018-08-17 04:20:59

标签: mysql laravel eloquent

我有这3张桌子 usersuser_infoattendances

示例数据如下:

用户表

|id|username|    email        |     password    |
|1 |  user  | email@email.com |  hashedpassword |
|2 |  user2 | email2@email.com|  pw             |

user_info表

|id| user_id|    full_name    |       dob       |
|1 |  1     | Pedro Dela Cruz |  1991-09-10     |
|2 |  2     | John Doe        |  1987-05-25     |

出勤表

|id| user_id|    log_date     |       log_time  | status
|1 |  1     | 2018-08-17      |  06:36:36       |  in
|2 |  3     | 2018-08-17      |  06:53:25       |  in
|4 |  4     | 2018-08-17      |  06:36:36       |  in
|5 |  5     | 2018-08-17      |  06:53:25       |  in

我需要获取的是当日无人值守的用户列表 在这种情况下,ID为2的用户当天没有出席。

我正在使用laravel,并且我使用了leftjoin来连接三个表,但是结果为零。

这就是我查询表格的方式

    $absentees = DB::table('users as u')
         ->join('user_info as ud','ud.user_id','=','u.id')
         ->leftjoin('attendances as at','at.user_id','=','ud.user_id')
         ->select('ud.*','at.log_date','at.user_id','u.username')
         ->where('at.log_date','=', date('Y-m-d'))
         ->whereNull('u.deleted_at')
         ->whereNull('at.log_date')
         ->distinct()
         ->get();

感谢您的帮助

1 个答案:

答案 0 :(得分:-1)

也许您应该将where子句更改为此

->where('at.log_date', date('Y-m-d'))

Query Builder in Codeigniter