Как узнать название и цену вида (ов) регистрации, связанных с регистрацией?(Красноречивый) - PullRequest
0 голосов
/ 24 мая 2018

Когда пользователь нажимает кнопку «Оплатить», он перенаправляется на страницу оплаты, например «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');
    }
}

1 Ответ

0 голосов
/ 08 июня 2018
class PaymentController extends Controller
{
    public function showSummary($id = "", $slug = "", $regID){


        $registrationTypeDetails = Registration::with(['participants.registration_type',
        'participants' => function ($query) use($regID){
            $query->select('id', 'registration_type_id', 'registration_id')->where('registration_id', $regID);
        }
        ])->find($regID);

        dd($registrationTypeDetails->toArray());

}
}

теперь я конвертирую в вывод array ($ registrationTypeDetails-> toArray ()):

array:7 [▼
  "id" => 1
  "status" => 1
  "conference_id" => 1
  "main_participant_id" => 1
  "created_at" => "2018-05-28 00:00:00"
  "updated_at" => "2018-05-28 00:00:00"
  "participants" => array:1 [▼
    0 => array:4 [▼
      "id" => 1
      "registration_type_id" => 1
      "registration_id" => 1
      "registration_type" => array:4 [▼
        "id" => 1
        "name" => "general"
        "price" => 10000
        "conference_id" => 1
      ]
    ]
  ]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...