Ich arbeite schon seit einiger Zeit mit Catalyst und DBIC, habe aber nie selbst ein Projekt gestartet. Jetzt erstelle ich eine Webapp-Datenbank von Grund auf neu und ich begann mich zu fragen, ob ich Daten in weniger Codezeilen abrufen könnte. Ich werde mit einem Teil des Schema-Diagramms weitermachen, um es klarer zu machen. Lassen Sie uns sagen, dass wir eine Datenbank wie dieses:DBIC tritt der Catalyst Web App bei
Normalerweise, wenn ich wollte, sagen wir, alle Informierte Einwilligung von einem bestimmten Thema unterzeichnet holen, würde ich so etwas wie dieses:
my $consentsignatures_mod = $c->model('pbitdb::InformedConsentSubjectSignature');
my $subject_consents = $consentsignatures_mod->search(
{subject_id => $subject_id},
{join => 'consent'},
);
$c->stash->{subject_consents};
und dann in der Vorlage würde ich durch die resultset wie
[% 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 -%]
in ähnlicher Weise für die Krankheiten und die Familiengeschichte durchlaufen, würde ich einen separa machen Suchen Sie nach subject_id in der entsprechenden Verknüpfungstabelle und verbinden Sie sie mit dem übergeordneten (Präzedenzfälle), um die Präzedenzdaten zu erhalten. Das funktioniert gut, aber wenn man bedenkt, dass ich auch eine Menge Informationen von einem Dutzend weiterer Tabellen abrufen muss (wie die der Familien- und Krankheitsgeschichte mit ihren entsprechenden Beziehungen zur Präzedenzfalltabelle), dachte ich, ich sollte verschachtelte Joins ausprobieren. Also ich habe ... versuchen, und dies kam heraus:
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
Weder Syntaxfehler noch DBIC Ausnahmen entstehen so, ich denke, der obige Code in Ordnung ist. Ich habe jedoch Probleme beim Drucken der Daten in der Vorlage. Wenn ich die Informierte Einwilligung abrufen möchten, würde ich so etwas wie:
[% 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 -%]
Alle oben kommt leer wie meine Träume. Irgendwelche Ideen?
Entschuldigung für die Verzögerung, wurde in einem anderen Projekt gefangen und konnte dies bisher nicht testen. Ich bemerkte, dass ich Prefetch verwenden konnte, aber den Unterschied nicht verstand, also ging ich mit dem Good'ol Join. Ihre Empfehlung funktioniert. Danke vielmals! –