Я пытаюсь выбрать только те события, в которых есть свободные слоты.Максимальное количество слотов определяется столбцом в моей таблице событий, а количество занятых слотов подсчитывается из таблицы приглашений.Проблема в том, что подсчет приглашений применяется ко всем событиям, а не по каждому идентификатору события, а участники, отображаемые для каждого события, - это просто все приглашенные пользователи, которые были приняты во что-либо.
Редактировать: Как передать переменную через вызываемыйфункция на вид?Я думаю, что если я смогу передать eventID в мою функцию countMembers, то это могло бы исправить счет.
Edit2: Решено.Просто переместите запросы в их собственные функции и передайте идентификатор в качестве параметра.
Выбор событий
$eventCompetition=DB::table('events')
->leftjoin('users', 'users.id', '=' , 'events.user_id')
->leftjoin('invitations','invitations.event_id', '=', 'events.eventID')
->where('events.eventType','=', 'Competition')
->where('events.eventStatus','=', 'UPCOMING')
->where('events.eventIsArchived','=', '0')
->where('events.user_id','!=',Auth::user()->id)
->where('events.eventSlots','>',
(DB::table('invitations')
->leftjoin('users', 'users.id', '=', 'invitations.sender_id')
->leftjoin('events', 'events.eventID', '=', 'invitations.event_id')
->whereColumn('invitations.event_id','events.eventID')
->where('invitations.status','=','ACCEPTED')
->count())
)
->orderBy('events.eventDateStart','DESC')
->paginate(10);
Просмотр участников
$members=DB::table('invitations')
->leftjoin('users', 'users.id', '=', 'invitations.sender_id')
->leftjoin('events', 'events.eventID', '=', 'invitations.event_id')
->whereColumn('invitations.event_id','events.eventID')
->where('invitations.status','=','ACCEPTED')
->orderBy('users.fName')
->paginate(10);
Подсчет членов
public static function countMembers()
{
//
$members=DB::table('invitations')
->leftjoin('users', 'users.id', '=', 'invitations.sender_id')
->leftjoin('events', 'events.eventID', '=', 'invitations.event_id')
->whereColumn('invitations.event_id','events.eventID')
->where('invitations.status','=','ACCEPTED')
->count();
return $members;
}
Вид
@foreach($eventCompetition as $event)
<form action = "/joinEvent/{{$event->eventID}}" method = "post">
<div id="viewEvent{{$event->eventID}}" class="modal fade">
<div class="modal-dialog modal-login">
<div class="modal-content">
<div class="modal-header text-white"style="background-color: #018BB5">
<h3 class="modal-title" style="color:black;"><strong>Event Info</strong></h3>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><h1>×</h1></button>
</div>
<div class="modal-body form-row col-md-12">
<table class="table table-striped" style="color:black;">
<thead>
<input type="hidden" id="receive" name="receive" value="{{$event->user_id}}">
@csrf
<tr>
<th scope="row">Event Name:</th>
<td>{{$event->eventName}}</td>
</tr>
<tr>
<th scope="row">Event Type:</th>
<td>{{$event->eventType}}</td>
</tr>
<tr>
<th scope="row">Max Slots:</th>
<td>{{$event->eventSlots}}</td>
</tr>
<tr>
<th scope="row">Address:</th>
<td>{{$event->eventAddress}}</td>
</tr>
<tr>
<th scope="row">Sport:</th>
<td>{{$event->eventSport}}</td>
</tr>
<tr>
<th scope="row">Date:</th>
<td><?php echo Carbon::parse($event->eventDateStart)->format('d F Y h:i:s A'); ?> <br>to <br><?php echo Carbon::parse($event->eventDateEnd)->format('d F Y h:i:s A'); ?></td>
</tr>
<tr>
<th scope="row">Details:</th>
<td>{{$event->eventDetails}}</td>
</tr>
<tr>
<th scope="row">Members (<?php echo EventController::countMembers(); ?>/{{$event->eventSlots}}):</th>
<td>
@foreach($members as $member)
<?php
echo "<br>$member->fName $member->mName $member->lName";
?>
@endforeach
</td>
</tr>
</thead>
</table>
<?php
if($event->sender_id != Auth::user()->id){
echo "<button type='button' class='btn btn-info btn-lg text-white' data-toggle='modal' data-target='#exampleModal$event->eventID'><strong>Send Join Request</strong></button>";
}
?>
</div>
</div>
</div>
</div>
</form>
@endforeach