我不确定如何进行复杂的查询以获取与注册关联的证书内容。可以更好地解释上下文的示例:
例如,用户Jake在会议“会议测试1”中向两个参与者(他和约翰)进行了注册。 “会议测试1”具有两种票证/注册类型(rtype1和rtype 2),并且两种注册类型都是免费的。
在注册中,用户Jake为他选择了注册类型“ rtype1”,为John选择了注册类型“ rtype2”。
因此,在杰克填写注册表之后,单击“注册”,数据库内容将保持如下所示。
数据库内容:
会议桌:
id name ...
1 Conference test 1
Registration_types表:
id name conference_id certificate_id certificate_available price
1 rtyp1 1 1 Y 0
2 rtype2 1 1 Y 0
证书表:
id content
1 <p>abbb<img src="https://proj.test/img/image_100.jpeg" width="1200" height="900" /></p>
注册表:
id conference_id user_that_did_registration
1 1 1
参与者表:
id registration_id registartion_type_id name
1 1 1 Jake
2 1 2 John
然后,我有一个页面,列出了用户在会议中的所有注册(过去和以后的注册)。如果有与用户注册的注册类型相关的证书,我将显示一个链接“下载证书”:
@foreach($nextRegistrations as $nextRegistration)
@foreach($nextRegistration->participants as $participant)
....
@if ($participant->registration_type->certificate_available == 'Y')
<a href="{{route('conferences.certificateDownload',[ 'regID'=> $nextRegistration->id])}}"> Download Certificate</a>
@endif
@endforeach
@endforeach
我有路线:
Route::get('/certificateDownload/{regID}', [
'uses' => 'RegistrationController@downloadCertificates',
'as' =>'conferences.certificateDownload'
]);
疑问:
我的疑问是,当用户单击“下载证书”时如何正确获取downloadCertificates()
中的证书内容。因为对于进行每次注册都是必要的,例如,在上面的示例中,对于每次进行$nextRegistration
,如果与每个参与者相关联的registration_type在每个参与者中具有“ Y”,则下载具有与该注册相关联的每个参与者的证书内容的PDF certificate_available字段(Y表示证书可用)。
我不理解查询该如何获取与注册关联的证书的信息。您可以帮助您了解如何实现此查询吗?我的操作如下,但无法正常工作,只是获取每个注册的信息。
public function downloadCertificates($regID)
{
//$certificatesOfRegistration = Registration::with('conference.registrationTypes.participants')->find($regID);
//$pdf = app()->make('dompdf.wrapper');
//pdf->loadHTML($certificateContent);
//return $pdf->download('certificates.pdf');
}
答案 0 :(得分:0)
在讨论中讨论完之后,我想知道您想要的是以下内容:
$regId = 123; // your registration id
$participants = Participant::where('registration_id', $regId)
->whereHas('registration_type', function ($query) {
$query->where('certificate_available', 'Y');
})
->with('registration_type.certificate')
->get();
编辑:,其中包含新信息,即我们希望每位参与者一个证书(如果有),我们现在应该使用类似以下的内容
foreach ($participants as $participant) {
$certificate = $participant->registration_type->certificate;
}
这将为您提供参与者列表,其中包含证书随附的注册类型。仅加载具有可用证书的参与者。您可以这样访问证书:
Response.sendTemporaryRedirect