Когда пользователь нажимает кнопку «Оплатить», он перенаправляется на страницу оплаты, например «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@showSummary',
'as' =>'conferences.showSummary'
]);
В showSummary () и я уже получаю название и дату конференции:
public function showSummary($id = "", $slug = "", $regID){
$registration = Registration::with([
'conference' => function ($query) {
$query->select('id', 'name', 'date');
}
])->find($regID);
}
Сомнение: Я сомневаюсь, как изменить следующий запрос, чтобы получитьназвание и цена каждого типа регистрации, связанного с регистрацией, а также получить количество, чтобы можно было показать сводку, подобную приведенной выше.
С:
$registrationTypeDetails = Registration::with([
'participants' => function ($query) {
$query->select('id', 'registration_type_id', 'registration_id')->where('registration_id', $regID);
}
])->find($regID);
dd($registrationTypeDetails);
$реgistrationTypeDetails показывает участников, связанных с регистрацией:
Registration {#264 ▼
...
#relations: array:1 [▼
"participants" => Collection {#261 ▼
#items: array:2 [▼
0 => Participant {#269 ▼
#fillable: array:4 [▶]
...
#attributes: array:3 [▼
"id" => 3
"registration_type_id" => 2
"registration_id" => 2
]
...
}
1 => Participant {#271 ▼
#fillable: array:4 [▶]
....
#attributes: array:3 [▼
"id" => 4
"registration_type_id" => 3
"registration_id" => 2
]
....
}
]
}
]
}
Таким образом, с помощью вышеупомянутого запроса можно получить регистрационный номер_перечисления участников, связанных с регистрацией, и, следовательно, должна быть возможность получить информацию о каждом типе регистрации.но я не понимаю, как изменить запрос для достижения этого.
Знаете ли вы, как этого добиться?
Соответствующая структура таблиц для вопроса:
Registration: id, status, conference_id, main_participant_id
(main_participant_id is the id of the user that did the regitration)
Registration Types: id, name, price, conference_id
Conference: id, name, date, organizer_id
Participant: 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');
}
}