Как получить ответы на индивидуальные вопросы каждого участника?(Красноречив) - PullRequest
0 голосов
/ 18 мая 2018

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

Тогда есть также ссылка «Детали». При нажатии «Подробности» появляется модальное окно, в котором отображаются данные о регистрации:

  • пользователь, который сделал регистрацию
  • имя и фамилия каждого зарегистрированного участника (ов) в указанной клик-регистрации

Я сомневаюсь, как показать, помимо этой информации, приведенной выше, показать также вопрос (ы) и ответ (ы) на эти вопросы.

Чтобы лучше объяснить контекст вопросов: например, пользователь Джон регистрируется в конгрессе «конгресс-тест», и, например, этот конгресс имеет два типа заявок: tt1 и tt2. И у обоих типов билетов (tt1 и tt2) есть пользовательский вопрос "Какой у тебя телефон?" ассоциируется с ними. Таким образом, в регистрационной форме «конгресс-теста» эти вопросы будут отображаться для каждого выбранного билета, и Джон должен ответить на вопрос «Какой у вас телефон?» за каждый билет.

Так что в приведенном ниже коде я также хочу показать ответы на пользовательские вопросы, на которые пользователь ответил в форме регистрации, но я не понимаю, как. Знаете ли вы, что необходимо, чтобы получить ответы? Нужны ли отношения «один ко многим» между Участником и Ответом?

код, работающий без отображения ответов на пользовательские вопросы:

@foreach($congress->registrations as $registration)
    <tr>
        <td>{{$registration->customer->name}} {{$registration->customer->surname}}</td>
        <td>...</td>
        <td>
            <a class="btn btn-primary showDetails" 
             data-regid="{{$registration->id}}">Details</a>
        </td>
    </tr>

    <div class="modal fade" id="registrationDetails-{{ $registration->id }}" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-sm">
            <div class="modal-content">
                <div class="modal-body">
                    <dl>
                        <dt>Name</dt>
                        <dd>{{ $registration->customer->name }}</dd>
                        <dt>Email</dt>
                        <dd>{{ $registration->customer->email }}</dd>
                    </dl>

                  @foreach ($registration->participants as $participant)
                      <dl>
                          <dt>Name</dt>
                          <dd>{{ $participant->name }}</dd>
                          <dt>Surname</dt>
                          <dd>{{ $participant->surname }}</dd>
                          <dt>Ticket Type</dt>
                          <dd>{{ $participant->registration_type->name }}</dd>

                           <!-- Doubt -->

                           <dt>Doubt: How to get the 
                             custom question(s)? (ex: Whats your phone?)</dt>
                          <dd> Doubt: how to get the answer?</dd>

                      </dl>
                  @endforeach
        </div>
    </div>
@endforeach

Контекстная диаграмма: enter image description here

Модели Laravel:

class Congress extends Model
{ 
    // A congress has one creator
    public function creator(){
        return $this->belongsTo('App\User', 'user_id');
    }
    public function ticketTypes(){
        return $this->hasMany('App\TicketType', 'congress_id');
    }
    public function registrations(){
        return $this->hasMany('App\Registration', 'congress_id');
    }
}

// User model
class User extends Authenticatable
{
    public function congresses(){
        return $this->hasMany('App\Congresss', 'user_id');
    }

    // A user can register in many congresses
    public function registrations(){
        return $this->hasMany('App\Registration','main_participant_id');
    }
}

// Registration model
class Registration extends Model
{
    // a registration has one user that do the registration
    public function customer(){
        return $this->belongsTo('App\User');
    }

    // a registration can have many participants
    public function participants(){
        return $this->hasMany('App\Participant');
    }

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

// Participant Model
class Participant extends Model
{
    // a participant belongs to a registration
    public function registration(){
        return $this->belongsTo('App\Registration');
    }
     public function ticket_type(){
        return $this->belongsTo('App\TicketType');
    }
}

// Ticket Type model
class TicketType extends Model
{
    public function congress(){
        return $this->belongsTo('App\Congress');
    }

    public function questions(){
        return $this->belongsToMany('App\Question', 'ticket_type_questions')->withPivot(['required']);;
    }

     // a registration can have many participants
    public function participants(){
        return $this->hasMany('App\Participant');
    }
}

// Question model
class Question extends Model
{
    public function ticket_type(){
        return $this->belongsToMany('App\TicketType', 'ticket_type_questions')
            ->withPivot('required');
    }
}

// Answer model
class Answer extends Model
{
    public function question(){
        return $this->belongsTo('Question');
    }
    public function participant(){
        return $this->belongsTo('Participant');
    }
}

// TicketTypeQuestion model
class TicketTypeQuestion extends Model
{
}

DB:

enter image description here

1 Ответ

0 голосов
/ 19 мая 2018

Да, как вы и догадались, один из способов - добавить отношение «один ко многим» от участника к ответам (так как у вас уже есть столбец БД для member_id, в любом случае).

class Participant extends Model
{
    // a participant belongs to a registration
    public function registration(){
        return $this->belongsTo('App\Registration');
    }
     public function ticket_type(){
        return $this->belongsTo('App\TicketType');
    }
    public function answers(){
        return $this->hasMany('App\Answer');
    }
}

Затем,по вашему мнению, вы можете сделать что-то вроде:

@foreach($participant->answers as $answer)
    <p>{{ $answer->question->question }}: {{ $answer->answer }}</p>
@endforeach

Если вы еще этого не сделали, я бы удостоверился, что вы нетерпеливо загружаете все это перед вызовом представления.Например $congress->load('registrations.participants.answers.question')

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