Запрос с несколькими таблицами (получить подробную информацию о регистрации) - PullRequest
0 голосов
/ 13 июня 2018

Я хочу получить запрос с использованием laravel, который позволяет получить подробную информацию о регистрации.У меня есть этот маршрут:

Route::get('/conference/{id}/{slug?}/registration/{regID}/info', [
    'uses' => 'RegistrationController@getRegistrationInfo',
    'as'   =>'conferences.registrationInfo'
]);

Когда пользователь получает доступ к этому маршруту, я хочу показать подробности этой конкретной регистрации пользователя.

Например, если пользователь John W. сделалрегистрация в конференции, в которой:

  • выбрано 1 билет / регистрация типа «генерал» для него (Джон В.) и 1 билет / регистрация типа «плюс» (для Джейка В.)
  • , а тип регистрации "general" имеет цену "0"
  • , а тип регистрации "plus" имеет цену "1"
  • , а all_participants имеет значение«1» в таблице конференций означает, что необходимо собрать имя и фамилию каждого участника, «0» означает, что необходимо собрать имя и фамилию только того пользователя, который выполняет регистрацию (авторизованный пользователь)

В регистрационной таблице будет вставлено:

id       status        conference_id         main_participant_id
1          I                 1                          1 

В таблице участников:

id    registration_id    registration_type_id       name        surname
1           1                   1                     John           W
2           1                   2                    Jake            W

Таблица типов регистрации имеет вид:

id        name       price     ...
1         general       0
2          plus        1

Стол для конференций похож на:

id       name                            date
1         conference name        2018-06-13

Я хочу иметь запрос, который позволяет показать для конкретной регистрации, когда пользователь нажимает на ссылку, связанную с указанным выше маршрутом "Route :: get ('/ conference / {id} / {slug?} / registration / {regID} / info ", показать для каждого тикета / типа регистрации, связанного с этим регистрационным идентификатором, в данном случае было 2 типа регистрации (2 участника), поэтому запрос, позволяющий отобразить список с двумяэлементы списка с информацией о регистрации, например:

<ul>
    <li>
        <span>show the registration ID here</span>
        <span>Conference name: conference name</span>
        <span>Conference date: 2018-06-13</span>
        <span>Registration type: general</span>
        <span> Participant: John W</span>
        <span>Price: 0<span>
    </li>
    <li>
        <span>show the registration ID here</span>
        <span>Conference name: conference name</span>
        <span>Conference date: 2018-06-13</span>
        <span>Registration type: plus</span>
        <span> Participant: Jake W</span>
        <span>Price: 1<span>
    </li>
<ul>

Знаете ли вы, как этого можно достичь?Я не понимаю, как это сделать правильно, если это должен быть только один запрос или несколько запросов.Знаете ли вы, как правильно выполнить запрос в этом контексте?


Соответствующие модели для вопроса:

Модель конференции:

class Conference extends Model
{
    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');
    }

    public function participants(){
        return $this->hasMany('App\Participant');
    }

    public function registrations(){
        return $this->belongsToMany('App\Registration', 'registration_registration_types');
    }
}

Модель регистрации:

class Registration extends Model
{

    public function customer(){
        return $this->belongsTo(User::class, 'main_participant_id', 'id');
    }

    public function participants(){
        return $this->hasMany('App\Participant');
    }

    public function registration_types(){
        return $this->belongsToMany('App\RegistrationType', 'registration_registration_types');
    }

    public function conference(){
        return $this->belongsTo('App\Conference');
    }

    public function payment()
    {
        return $this->hasOne('App\Payment');
    }
}

Модель участника:

class Participant extends Model
{
    public function registration(){
        return $this->belongsTo('App\Registration');
    }
    public function registration_type(){
        return $this->belongsTo('App\RegistrationType');
    }

}

Модель пользователя:

class User extends Authenticatable
{
    public function registrations(){
        return $this->hasMany('App\Registration','main_participant_id');
    }
}

Как:

public function getRegistrationInfo($regID){


        $q = Registration::
         with('conference', 'registration_types.participants')
         ->find($regID);

    }

показывает:

Table 'project.registration_registration_types'
doesn't exist (SQL: select `registration_types`.*, 
`registration_registration_types`.`registration_id` as 
`pivot_registration_id`, 
`registration_registration_types`.`registration_type_id` as 
`pivot_registration_type_id` from `registration_types` inner join 
`registration_registration_types` on `registration_types`.`id` = 
`registration_registration_types`.`registration_type_id` where 
 `registration_registration_types`.`registration_id` in (1))

Ответы [ 2 ]

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

Надеюсь, я точно понимаю, что вы имеете в виду

controller:

<?php

namespace App\Http\Controllers;

use App\Registration;
use Illuminate\Http\Request;

class RegistrationController extends Controller
{
    public function getRegistrationInfo($id ,$slug, $regID)
    {

        $registration = Registration::with('conference','Conference.registrationTypes','Conference.registrationTypes.participants')
        ->where('id',$regID)->first();
    return view('your_view_name',compact('registration'));

}

}

ваш view:

<ul>
@foreach($registration->conference->registrationTypes as $key=>$registrationType)

     <li>
             <span>show the registration ID here : {{$registration->id}}</span> <br>
             <span>Conference name: conference name : {{$registration->conference->name}}</span><br>
             <span>Conference date: {{$registration->conference->date}}</span><br>
             <span>Registration type: {{$registration->conference->registrationTypes[$key]['name']}}</span><br>
             <span> Participant: {{$registration->conference->registrationTypes[$key]->participants[0]->name .' '.$registration->conference->registrationTypes[$key]->participants[0]->surname}}</span><br>
             <span>Price: {{$registration->conference->registrationTypes[$key]['price']}}</span><br>
    </li>

@endforeach
</ul>

вывод:

<ul>

         <li>
                 <span>show the registration ID here : 1</span> <br>
                 <span>Conference name: conference name : conferanse shomare 1</span><br>
                 <span>Conference date: 2018-06-06 00:00:00</span><br>
                 <span>Registration type: general</span><br>
                 <span> Participant: John w</span><br>
                 <span>Price: 0</span><br>
        </li>


         <li>
                 <span>show the registration ID here : 1</span> <br>
                 <span>Conference name: conference name : conferanse shomare 1</span><br>
                 <span>Conference date: 2018-06-06 00:00:00</span><br>
                 <span>Registration type: plus</span><br>
                 <span> Participant: Jake w</span><br>
                 <span>Price: 1</span><br>
        </li>

</ul>
0 голосов
/ 15 июня 2018

Ops .. Я вижу в Registration модель и функцию registration_types, которую вы вызываете BelongsToMany, но параметры этой функции, такие как:

belongsToMany($related, $table, $foreignKey, $relatedKey, $relation)

, могут быть неправильной таблицей registration_registration_types

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