在 laravel 中也获得总预订量为零的天数

Get Days with zero total bookings too in laravel

我在一个 table 中有预订列表,在另一个 table 中有活动信息,例如:日期、天数、event_name、价格、持续时间等。 .

我需要使用天数对预订进行分组,这很好用,但是当有没有任何预订的地点并且我的连接查询匹配地点和预订时问题就来了 table 但是如果给定地点没有任何预订然后该特定日期的 groupby 失败。

示例:我在周一、周二和周三有景点。如果星期一没有预订,我不会得到总预订计数为零。那天我什么也没得到。简而言之,它不存在。 为什么我需要是因为:我在前端有一个进度条显示没有。每天的预订量,所以如果某一天没有预订,我最终没有进度条。

控制器:

//This query does not return bookings for tuesday because I dont have bookings.
$days = DB::table('spots')
        ->join('bookings','spots.id','=','bookings.spot_id')
        ->where('spots.event_id','=',$id)
        ->select('day',DB::raw('count(bookings.spot_id) as bookingcount'))
        ->groupby('spots.day')
        ->get();

查看:

@foreach($days as $day)
<div class="col-sm-6 col-md-3">
    <div class="tablet tablet-stat">
        <h4 class="tablet-header">{{ $day->day }}</h4>
        <div id="circle">
                <div class=" c100 p{{round(($day->bookingcount/$totalspace->totalspace)*100,0)}}">
                    <span> {{ round(($day->bookingcount/$totalspace->totalspace)*100,2) }} </span>
                    <div class="slice">
                        <div class="bar"></div>
                        <div class="fill"></div>
                    </div>
                </div>
            </div>
    </div>
</div>
@endforeach

我并不是真的在寻找技巧,比如简单地找到没有预订的那一天并创建另一个 foreach 循环来显示那些预订为零的日子。我更喜欢在我的查询中计数为零。

像这样尝试:

 $days = DB::table('spots')
            ->leftJoin('bookings','spots.id','=','bookings.spot_id')
            ->where('spots.event_id','=',$id)
            ->select('day',DB::raw('count(bookings.spot_id) as bookingcount'))
            ->groupby('spots.day')
            ->get();

*更正了之前的回答,没看懂

外连接应该做你想做的事。