【发布时间】:2018-12-03 04:51:09
【问题描述】:
我在下面有这个查询来获取在特定会议中注册的所有用户的电子邮件。
$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] 上的未定义关系 [Registration]”。
$getEmailsOfAspecificRegistrationType =
Conference::with('registrations',
'Registration.registrationTypes', 'Registration.registrationTypes.participants')
->where('id', $id)->get();
表格结构和示例以更好地解释上下文:
例如,有一个会议“会议 1”,它有两种注册类型(rt1 和 rt2)。目前,“会议 1”只有两个注册。一个注册由 Jake 完成,另一个由 Ben 完成。 Jake 与 3 名参与者(他、Jane 和 Paul)进行了注册。本只为他做了一个登记。表格结构如下。
我只想获取在会议中注册的用户的电子邮件,ID 为“1”,并且此注册有 1 个或多个与特定注册类型相关联的参与者,例如“rt01”。因此,在这种情况下,我只想获取用户 1“jakeemailtest”的电子邮件,因为它是唯一进行与注册类型“rt01”相关联的注册的参与者,因为参与者 Jake 和 Jane 与此注册类型相关联(尽可能检查参与者表)。
会议桌:
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');
}
【问题讨论】:
-
你的模型是如何相互关联的,你可以包括你的模型定义吗?
-
谢谢,我用模型更新了问题,还用表格结构的例子更新了问题。