저는 Catalyst 및 DBIC를 사용하여 잠시 동안 작업을 해봤지만 직접 프로젝트를 시작한 적이 없습니다. 이제는 처음부터 webapp 데이터베이스를 작성하고 있으며 더 적은 코드 행에서 데이터를 가져올 수 있는지 궁금해하기 시작했습니다. 스키마의 다이어그램을 더 명확하게하기 위해 바로 살펴 보겠습니다. 이제 우리는이 같은 데이터베이스가 있다고 가정 해 봅시다 :DBIC가 Catalyst 웹 응용 프로그램에 합류했습니다.
일반적으로, 나는, 말, 인출하기를 원한다면 특정 주제에 의해 서명 된 모든 정보를 동의, I 좋겠 그래서 이런 식으로 뭔가 :
my $consentsignatures_mod = $c->model('pbitdb::InformedConsentSubjectSignature');
my $subject_consents = $consentsignatures_mod->search(
{subject_id => $subject_id},
{join => 'consent'},
);
$c->stash->{subject_consents};
그리고 템플릿에 내가 마찬가지로
[% WHILE (consent_signatures = subject_consents.next()) -%]
<tr>
<td> [% consent_signatures.consent.get_column('consent_title') -%]</td>
<td> [% consent_signatures.consent.get_column('consent_type') -%]</td>
<td> [% consent_signatures.consent.get_column('consent_description') -%]</td>
<td> [% consent_signatures.consent.get_column('consent_form_version') -%]</td>
<td> [% consent_signatures.get_column('signed_date') -%]</td>
</tr>
[% END -%]
같은 결과 집합을 반복 할 것, 질병 및 가족 역사, 나는 separa를 만들 것 te는 해당 연결 테이블에서 subject_id를 검색하고이를 상위 (이전)에 연결하여 선행 데이터를 얻습니다. 이것은 잘 작동하지만, 가족과 병력과 관련하여 전례 표와 관련하여 12 개의 테이블에서 오는 수많은 정보를 검색해야한다는 것을 고려할 때 중첩 된 조인을 시도해야한다고 생각했습니다. 그래서 난 ... 시도 않았고,이 나왔다 :
my $subject_info = $subject_mod->search(
{subject_id => $subject_id},
{join => [{'disease_histories' => 'precedent'},
{'informed_consent_subject_signatures' => 'consent'}
{'familial_history' => 'precedent'}]}
);
$c->stash->{subject} = $subject_info
어느 구문 오류도 DBIC 예외 그래서 것 같아요, 위의 코드는 OK입니다 발생한다. 그러나 템플릿에 데이터를 인쇄하는 데 문제가 있습니다. 정보통 동의를 검색하려면 다음과 같이하십시오.
[% WHILE (consent_signatures = subject.informed_consent_subject_signatures.next()) -%]
<tr>
<td> [% consent_signatures.consent.get_column('consent_title') -%]</td>
<td> [% consent_signatures.consent.get_column('consent_type') -%]</td>
<td> [% consent_signatures.consent.get_column('consent_description') -%]</td>
<td> [% consent_signatures.consent.get_column('consent_form_version') -%]</td>
<td> [% consent_signatures.get_column('signed_date') -%]</td>
</tr>
[% END -%]
위의 내용은 모두 내 꿈처럼 비어 있습니다. 어떤 아이디어?
지연으로 인해 미안, 다른 프로젝트에 걸려 지금까지 이것을 테스트 할 수 없었습니다. 내가 프리 페치를 사용할 수 있다는 것을 알았지 만 차이점을 얻지 못해서 good'ol join으로 갔다. 귀하의 권장 사항이 적용됩니다. 고마워요! –