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

时间:2016-05-05 11:23:06

标签: php mysql html5 laravel blade

我在一张桌子上有预订列表,我有另一个表格点,其中包含事件信息,例如:日期,日期,事件名称,价格,持续时间等。

我需要使用days来分组预订,这可以正常工作,但问题出现的时候有没有任何预订的地点,我的连接查询与地点和预订表相匹配,但如果没有任何预订的特定地点,那么该特定的组合一天失败。

示例:周一,周二和周三有点。如果星期一没有预订,我的总预订计数不会为零。那天我什么也得不到。注意,它不存在。 我需要的原因是因为:我在前端有一个进度条,显示没有。对于每天的预订,所以如果没有给定的一天预订我最终没有进度条。

控制器:

//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();

查看:

screenshot of the days progress bar, tuesday is not shown

@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循环来展示那些没有预订的日子。我更喜欢在查询中将计数设为零。

1 个答案:

答案 0 :(得分:1)

试试这样:

 $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();

*纠正了之前的答案,没有多大意义

外部联接应该做你想要的。