10

DBIx :: Classの結果セットが与えられた場合、次に例を示します。

my $rs = $c->model("DB::Card")->search({family_name => "Smith"});

私が読んだチュートリアルでは、stashを使用して行のarrayrefを渡します。

$c->stash->{cards} = [$rs->all];

これにより、この時点でクエリが実行され、結果のオブジェクトがスタッシュに詰め込まれるため、TemplateToolkitで次のように使用できます。

[% FOREACH card IN cards %] 
    [% card.given_name %] [% card.family_name %] 
[%END%]

TTがDBからフェッチされるときに行を反復処理する適切な方法はありますか?

4

4 に答える 4

19

もちろん。結果セットを TT に直接渡し、テンプレートで反復処理できます。

$c->stash->{cards} = $rs;

...その後:

[% WHILE (card = cards.next) %]
    [% card.given_name %] [% card.family_name %]
[% END %]
于 2009-01-15T16:17:53.043 に答える
5

または、さらに良い:

$c->stash(cards => $rs);

...TT テンプレートで:

[% FOREACH card = cards %]
    [% card.given_name %] [% card.family_name %]
[% END %]
于 2009-06-23T16:35:37.707 に答える
2

私は著者とまったく同じことをしていました。

より厳密な MVC アプローチを作成しようとして、コントローラーで DBIC オブジェクトを処理し、テンプレートを表示するための非常に単純な stash を渡しています。(主な利点は、Web インターフェースだけでなく、他のスクリプトでもコードを再利用できることです。)

これがより効率的かどうか、処理またはメモリの観点から誰かが知っているかどうか知りたいです。最初の方法は処理時間が短くなりますが、メモリをより長く保持すると思います。私の新しいアプローチでは、一時的にもう少し処理とメモリが必要になると思いますが、結果セット オブジェクトが大きくなる可能性があるため、それほど長くは存続しません。

于 2010-03-30T16:27:02.133 に答える
2

そうです:

@{$c->stash->{cards}} = $rs->all;

テンプレートでは:

[% FOREACH card IN cards %]
    [% card.given_name %] [% card.family_name %]
[% END %]
于 2009-08-12T22:23:50.120 に答える