Search code examples
perlcatalysttemplate-toolkitdbix-class

What's the right way to display a DBIx::Class ResultSet in my Catalyst project that uses Template Toolkit?


Given a DBIx::Class resultset, for example:

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

the tutorials I've read use the stash to pass an arrayref of rows:

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

This results in the query getting executed at this point, and the resulting objects stuffed into the stash, so they can be used in TemplateToolkit as:

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

Is there a proper way to have TT iterate over the rows as they get fetched from the DB?


Solution

  • Sure. You can pass the result set directly to TT and iterate over it in the template.

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

    ...and then:

    [% WHILE (card = cards.next) %]
        [% card.given_name %] [% card.family_name %]
    [% END %]