私はCatalystとDBICをしばらく使っていましたが、自分でプロジェクトを始めたことはありません。今、私は最初からwebappデータベースを作成しており、コードの行数を減らしてデータを取得できるかどうか疑問に思っています。私は、スキーマの図をより明確にするために、スキーマの図を参照していきます。我々はこのようなデータベースを持っているとしましょう:DBICがCatalystウェブアプリケーションに参加
通常、私は、たとえば、特定の被験者が署名したすべてのインフォームドコンセントを取得したい場合、私は思いますので、このような何か:
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を検索し、それを親(前例)に結合して先例データを取得する。これはうまくいきますが、十数個のテーブルから得られる大量の情報を取得する必要があることを考慮すれば、ネストされた結合を試してみるべきだと思いました。だから私は...てみましたが、これは出てきた:どちらも構文エラーもDBICの例外が発生するので、
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
、私は推測し、上記のコードは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に参加しました。 あなたのお勧めは機能します。どうもありがとう! –