Как получить регистрационную информацию из $ регистрация?(Красноречив) - PullRequest
0 голосов
/ 07 июня 2018

Пользователь может получить доступ к странице, где появляется список с его следующими регистрациями в конференциях, то есть регистрациями в конференциях, которые еще не произошли.Для каждой регистрации, выполненной пользователем, если эта регистрация еще не оплачена, то есть столбец статуса этой регистрации в таблице регистраций имеет значение «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');
    }
}

1 Ответ

0 голосов
/ 07 июня 2018

Я думаю, что ваша схема немного странная.Судя по URI, кажется, что вы запрашиваете информацию о конкретной «Регистрации», но вы отображаете все регистрации пользователя.Для ясности вы должны использовать что-то вроде http://proj.test/conference/{conference_id}/registration/status.

Ваша проблема в том, что вам не хватает таблицы registration_type_id column ub registration.Нет возможности подключить пользователя с типом регистрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...