Laravel:介于零之间的日期


Laravel: Date between with zero values

我正在尝试获取给定日期范围的数据库值。问题是,我也在努力实现缺失的价值观。如果我有第1天和第3天的值,并且我要求第1-5天的值。我想得到这样的东西:

1->值

2->空/0

3->值

4->空/0

5->空/0

好的,我知道如何只使用MySQL和左联接中的这个临时表来解决这个问题:

(select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from                                                                                            
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union  select 8 union select 9) t0,
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v

不幸的是,我不知道如何将其包含在Eloquent ORM中。目前我正在考虑这样的东西:

$weekclockings = $shift->clockings()->leftJoin(function($query)
{                                                                   
    $query->raw($aboveQuery);
}, "v.selected_date", ">", "timeclocked.time_in")

但这不起作用,只会给我"Grammar.php第33行中的ErrorException:类闭包的对象无法转换为字符串"。

所以,这可能不是最好的方法。有人知道如何做到这一点吗?

我不知道这里的clockings()是什么——可能是一个范围,但要在联接中使用原始SQL,应该使用:

$weekclockings = $shift->clockings()->leftJoin('DB::raw($aboveQuery), "v.selected_date", ">", "timeclocked.time_in");