Пользователь может получить доступ к странице, где появляется список с его следующими регистрациями в конференциях, то есть регистрациями в конференциях, которые еще не произошли.Для каждой регистрации, выполненной пользователем, если эта регистрация еще не оплачена, то есть столбец статуса этой регистрации в таблице регистраций имеет значение «I» (неполное), появляется ссылка «Оплатить»:
@foreach($nextRegistrations as $nextRegistration)
@if(!empty($nextRegistration->conference || !empty($nextRegistration->conference->start_date)))
<li class="list-group-item">
<h5>{{optional($nextRegistration->conference)->name}}</h5>
@if ($nextRegistration->status === 'I')
<a href="{{route('conferences.showPaymentPage',
['id' => $nextRegistration->conference->id,
'slug' => $nextRegistration->conference->slug,
'regID'=> $nextRegistration->id])}}"
class="btn btn-primary ml-2"> Pay
</a>
@endif
</li>
@endif
@endforeach
Когда пользователь нажимает кнопку «Оплатить», его следует перенаправить на страницу оплаты, например «http://proj.test/conference/2/conference-title/payment/registration/6",, где 6 - это идентификатор регистрации, который пользователь хочет заплатить, а« 2 »- это идентификатор конференции, поэтому пользовательоплачивает регистрацию, касающуюся конференции, с идентификатором «2».
На странице оплаты регистрации должна появиться сводка регистрации. Например, если пользователь зарегистрировался в конференции с 3 билетами / типами регистрации, 1 типа «общий» и 2 типа «плюс», должно отображаться резюме, например:
Title of the conference (ex: Conference test)
Date of the conference
Registration Type Quantity Price Subtotal
general 1 0.00 € 0.00$
plus 2 1.00 € 2.00$
Итак, у меня есть этот маршрут, когда пользователь нажимает кнопку «Оплатить»:
Route::get('/conference/{id}/{slug?}/payment/registration/{regID}', [
'uses' => 'PaymentController@showPaymentPage',
'as' =>'conferences.showPaymentPage'
]);
А в showPaymentPage()
я получаю регистрацию PaymentController и получаю регистрацию, которую пользователь хочет оплатить с помощью "$registration = Registration::find($regID);
":
class PaymentController extends Controller
{
public function showPaymentPage($id = "", $slug = "", $regID){
$registration = Registration::find($regID);
//dd($registration->conference) shows Conference {#282 ▼ #fillable: array:18 [▶]...}
//dd($registration->customer) shows User {#282 ▼ #fillable: array:13 [▶]...}
}
}
Сомнение:
Знаете ли вы, как при регистрации $ получить необходимую информацию для отображения информации о регистрации, как в приведенном выше резюме?
Соответствующая структура таблиц для вопроса:
Registration table:
id, status, conference_id, main_participant_id
Registration Types table:
id, name, price, confernece_id
Conference table:
id, name, date, organizer_id
Participant table:
id, registration_id, registration_type_id, name, surname
Соответствующие модели для вопроса:
Модель пользователя:
class User extends Authenticatable
{
public function conferences(){
return $this->hasMany('App\Conference', 'organizer_id');
}
public function registrations(){
return $this->hasMany('App\Registration','main_participant_id');
}
}
Модель конференции:
class Conference extends Model
{
public function organizer(){
return $this->belongsTo('App\User', 'organizer_id');
}
public function registrationTypes(){
return $this->hasMany('App\RegistrationType', 'conference_id');
}
public function registrations(){
return $this->hasMany('App\Registration', 'conference_id');
}
}
Модель регистрации Тип:
class RegistrationType extends Model
{
public function conference(){
return $this->belongsTo('App\Conference');
}
// a registration can have many participants
public function participants(){
return $this->hasMany('App\Participant');
}
}
Модель регистрации:
class Registration extends Model
{
// a registration has one user that do the registration
public function customer(){
return $this->belongsTo(User::class, 'main_participant_id', 'id');
}
// a registration can have many participants
public function participants(){
return $this->hasMany('App\Participant');
}
public function conference(){
return $this->belongsTo('App\Conference');
}
public function payment()
{
return $this->hasOne('App\Payment');
}
}
Модель участника:
class Participant extends Model
{
// a participant belongs to a registration
public function registration(){
return $this->belongsTo('App\Registration');
}
public function registration_type(){
return $this->belongsTo('App\RegistrationType');
}
}