在 laravel 中获得总预订量为零的天数
Posted
技术标签:
【中文标题】在 laravel 中获得总预订量为零的天数【英文标题】:Get Days with zero total bookings too in laravel 【发布时间】:2016-08-31 04:01:02 【问题描述】:我在一张桌子上有预订清单,我还有另一张桌子上有活动信息,例如:日期、日期、活动名称、价格、持续时间等。
我需要使用天数进行 groupBy 预订,这可以正常工作,但是当有没有任何预订的地点并且我的连接查询匹配点和预订表时问题就来了,但是如果给定地点没有任何预订,那么该特定地点的 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 pround(($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】:试试这样:
$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();
*更正上一个答案,没有多大意义
外连接应该做你想做的事。
【讨论】:
遇到错误:SQLSTATE[HY000]: General error: 1111 Invalid use of group function (SQL: selectday
, sum(count(bookings.spot_id)) as bookingcount from spots
内部连接bookings
spots
.id
= bookings
.spot_id
其中spots
.event_id
= 1 组 spots
.day
)
为什么总要计算count(bookings)?它将导致多行的单个值。
不客气。不知道为什么要计算总和。我在想别的事,我的错。以上是关于在 laravel 中获得总预订量为零的天数的主要内容,如果未能解决你的问题,请参考以下文章