【问题标题】:Left Join not working as intended yet SQL accepts itLeft Join 未按预期工作,但 SQL 接受它
【发布时间】:2019-08-15 12:45:32
【问题描述】:

HomeController.php

public function index()
{      
    $employees = DB::table('timings')
                ->distinct()
                ->selectRaw("timings.employee_id, min(time_logged) AS minTime, max(time_logged) AS maxTime")
                ->leftJoin('employees','timings.employee_id','=','employees.employee_id')
                ->where( DB::raw('cast(time_logged AS date)') , DB::raw('CURDATE()'))
                ->groupBy('timings.employee_id', DB::raw('cast(time_logged AS date)') )
                ->get();

    return view('home',compact('employees'));
}

实际 SQL

employee_id  |   minTime     |    maxTime     
1                2019-03-25       09:00:00 2019-03-25 14:00:00
...

结果

Array ( 
    [0] => stdClass Object ( 
    [employee_id] => 1 
    [minTime] => 2019-03-25 09:00:00 
    [maxTime] => 2019-03-25 14:00:00 
)
... 

由于某种原因,MYSQL 接受了左连接,但没有任何反应!我有 2 张桌子,员工和时间。无论我是包含 leftJoin 还是将其注释掉,代码都有效,但 EMPLOYEE 表不会显示。我不知道为什么它不起作用。

【问题讨论】:

  • 生成的实际 SQL 是什么?请张贴。
  • @Dai 添加到编辑中
  • @NazarAbubaker 你还没有包含生成的 SQL。
  • 这是他正在生成的 SQL:select distinct timings.employee_id,min(time_logged) AS minTime,max(time_logged) AS maxTime from `timings` left join `employees` on `timings`.`employee_id` = `employees`.`employee_id` where cast(time_loggedASdate) = CURDATE() group by `timings`.`employee_id`, cast(time_loggedASdate)
  • 您是否忘记在查询中添加名字、姓氏和头像列选择器?在 selectRaw() 中。

标签: php laravel laravel-query-builder


【解决方案1】:

您未从employee 表中选择详细信息

->selectRaw("timings.employee_id, min(time_logged) AS minTime, max(time_logged) AS maxTime,employees.first_name, employees.last_name")

【讨论】:

    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 2013-10-09
    • 2017-04-09
    • 2013-07-12
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多