У меня есть этот запрос ниже, чтобы получить электронную почту всех пользователей, которые зарегистрированы в определенной конференции.
$users = User::whereHas('registrations', function ($query) use($conferenceID) {
$query->where('conference_id', '=', $$conferenceID);
})->get();
И dd($users)
показывает array:2 [▼ 0 => "....mail.com" 1 => "....mail.com"]
.Так что все работает нормально.
Но я хочу получать только электронные письма пользователей, которые зарегистрировались в конкретной конференции ($ conferenceID), и у этой регистрации 1 или более участников, связанных с определенным типом регистрации.
Знаете ли вы, как правильно выполнить этот запрос?У меня есть код ниже, но он показывает «Вызов неопределенного отношения [Регистрация] на модели [App \ Conference]».
$getEmailsOfAspecificRegistrationType =
Conference::with('registrations',
'Registration.registrationTypes', 'Registration.registrationTypes.participants')
->where('id', $id)->get();
Структура таблицы и пример, чтобы лучше объяснить контекст:
Например, существует конференция «Конференция 1», которая имеет два типа регистрации (rt1 и rt2).А пока в конференции «Конференция 1» всего две регистрации.Одна регистрация была сделана Джейком, а другая Беном.Джейк сделал регистрацию с 3 участниками (он, Джейн и Пол).Бен только сделал для него регистрацию.Структура таблиц выглядит следующим образом.
Я хочу получать только электронные письма пользователей, которые зарегистрировались в конференции с идентификатором «1», и у этой регистрации 1 или более участников, связанных с определенным типом регистрации,например "rt01".Поэтому в этом случае я хочу получить только электронное письмо от пользователя 1 «jakeemailtest», потому что это единственный участник, который выполнил регистрацию, связанную с типом регистрации «rt01», поскольку участники Джейк и Джейн связаны с этим типом регистрации (как можно проверить в таблице участников).
Таблица конференций:
id name
1 Conference 1
Таблица пользователей:
id name email
1 Jake jakeemailtest@test...
2 Ben benmailtest@test...
Таблица типов регистрации:
id name conference_id
1 rt1 1
2 rt2 1
Таблица участников:
id registration_id registration_type_id name
1 1 1 Jake
2 1 1 Jane
3 1 2 Paul
4 2 2 Ben
И таблица регистрации:
id status user_that_did_registration conference_id
1 Incomplete 1 1
2 Incomplete 2 1
Соответствующие модели для вопроса:
Модель пользователей:
public function registrations(){
return $this->hasMany('App\Registration','user_that_did_registration');
}
Модель регистрации:
// user that did the registration
public function customer(){
return $this->belongsTo(User::class, 'user_that_did_registration', 'id');
}
public function participants(){
return $this->hasMany('App\Participant');
}
public function conference(){
return $this->belongsTo('App\Conference');
}
Модель конференции:
public function registrations(){
return $this->hasMany('App\Registration', 'conference_id');
}
Режим участников:
public function registration(){
return $this->belongsTo('App\Registration');
}
public function registration_type(){
return $this->belongsTo('App\RegistrationType');
}