我有一张桌子:
Event [id,'name','areTicketsGenerated'],
门票['id',event_id','seat_price_id','isAvailable'],
SeatPrice ['id','price_zone_id']。
我需要接收所有事件。在每种情况下,我都需要计算按“ price_zone_id”分组的可用门票。
我的查询是下一个:
$events = Event::with([
'tickets',
'tickets.seatPrice',
])->where('areTicketsGenerated', true)
->get();
foreach($events as $event) {
$ticketsCount = $event->tickets->where('isAvailable', true) ...
}
但是我只收到所有可用的票。
如何按“ price_zone_id”分组?
例如:
Event1
价格区1-10张门票;
价格区2-50张门票。
Event2
价格区4-20票;
价格区5-25票。
答案 0 :(得分:0)
您应该尝试以下操作:
$events = Event::with([
'tickets',
'tickets.seatPrice' => function($query){
$query->groupBy('price_zone_id');
}])
->where('areTicketsGenerated', true)
->get();
更新后的答案
也使用流利的查询
use DB;
$events = DB::table('events')
->join('tickets', 'tickets.event_id', '=', 'events.id')
->leftJoin('seat_price', 'tickets.seat_price_id', '=', 'seat_price.id')
->where('events.areTicketsGenerated',true)
->groupBy('seat_price.price_zone_id')
->get();
答案 1 :(得分:0)
这应该为您带来所需的所需结果:
$data = Event::join('Ticket','Event.id','Ticket.event_id')
->join('SeatPrice','Ticket.seat_price_id','SeatPrice.id')
->select('Event.id as id','price_zone_id',DB::raw('count(Ticket.*) as Total'))
->where('isAvailable', true)
->groupby('Event.id','price_zone_id')
->get();
$events = $data->groupBy('id')->toarray();
现在,在您的Blade中,您应该能够:
@foreach($events as $key => $event)
{{$key}}
@foreach($event as $item)
{{$item['price_zone_id']}} - {{$item['Total']}}
@endforeach
@endforeach