我在一张桌子上有预订列表,我有另一个表格点,其中包含事件信息,例如:日期,日期,事件名称,价格,持续时间等。
我需要使用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();
查看:
@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循环来展示那些没有预订的日子。我更喜欢在查询中将计数设为零。
答案 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();
*纠正了之前的答案,没有多大意义
外部联接应该做你想要的。