Я хочу показать некоторую информацию о последних регистрациях в конференции в виде таблицы ниже. Эти таблицы показывают, например, что последняя регистрация была сделана Джоном и является регистрацией с 2 участниками, и общая стоимость регистрации была 10,00.
User that did the registration | Quantity of participants registered | Total Value
John 2 10.00$
Jake 1 5.00$
У меня есть этот запрос, который показывает вышеуказанный результат:
SELECT users.name,COUNT(participants.registration_id),SUM(registration_types.price)
FROM participants
INNER JOIN registration_types
on participants.registration_type_id =
registration_types.id
INNER JOIN registrations
on registrations.registration_id =
participants.registration_id
INNER JOIN users
on users.id = registrations.user_that_did_registration
group by users.name
Но я хочу использовать Eloquent для выполнения запроса, чтобы можно было отобразить результаты в виде таблицы в таблице:
<table class="table table-striped table-responsive-sm box-shaddow">
<thead>
<tr>
<th scope="col">User that did registration</th>
<th scope="col">Quantity</th>
<th scope="col">Date</th>
<th scope="col">Price</th>
</tr>
</thead>
<tbody>
<tr>
...
</tr>
</tbody>
</table>
С Eloquent у меня вроде как ниже, но он не работает. Знаете ли вы, каким должен быть запрос, чтобы можно было отобразить необходимые данные в таблице?
$registrationsInfo = Participant::
leftJoin('registration_types', 'participants.registration_type_id', '=', 'registration_types.id')
->leftJoin('registrations', 'registration.id', '=', 'participants.registration_id')
->leftJoin('users', 'users.id', '=', 'registrations.user_that_did_registration')
->selectRaw('users.name, count(participants.registration_id), sum(registration_types.price)')
->groupBy('users.name')
->get();
Соответствующие модели для вопроса:
Модель пользователя:
public function registrations(){
return $this->hasMany('App\Registration','user_that_did_registration');
}
Регистрационная модель:
// user that did the registration
public function customer(){
return $this->belongsTo(User::class, 'user_that_did_registration', 'id');
}
public function participants(){
return $this->hasMany('App\Participant');
}
public function conference(){
return $this->belongsTo('App\Conference');
}
Модель конференции:
public function registrations(){
return $this->hasMany('App\Registration', 'conference_id');
}
Режим участников:
public function registration(){
return $this->belongsTo('App\Registration');
}
public function registration_type(){
return $this->belongsTo('App\RegistrationType');
}
Тип регистрации модель:
class RegistrationType extends Model
{
public function conference(){
return $this->belongsTo('App\Conference');
}
public function participants(){
return $this->hasMany('App\Participant');
}
public function registrations(){
return $this->belongsToMany('App\Registration', 'registration_registration_types');
}
}