代码之家  ›  专栏  ›  技术社区  ›  Thelema

在使用模板工具箱的Catalyst项目中,显示DBIx::Class ResultSet的正确方法是什么?

  •  10
  • Thelema  · 技术社区  · 16 年前

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

    我读过的教程使用隐藏来传递行的arrayref:

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

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

    当从数据库中获取行时,有没有一种合适的方法让TT迭代这些行?

    4 回复  |  直到 16 年前
        1
  •  19
  •   friedo    16 年前

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

    …然后:

    [% WHILE (card = cards.next) %]
        [% card.given_name %] [% card.family_name %]
    [% END %]
    
        2
  •  5
  •   delta    15 年前

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

    …在TT模板中:

    [% FOREACH card = cards %]
        [% card.given_name %] [% card.family_name %]
    [% END %]
    
        3
  •  2
  •   Julien    15 年前

    我愿意:

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

    在模板中:

    [% FOREACH card IN cards %]
        [% card.given_name %] [% card.family_name %]
    [% END %]
    
        4
  •  2
  •   Chris    15 年前

    我做的和作者完全一样。

    我很好奇,是否有人知道这是更有效的还是没有,处理或记忆方面。我认为第一种方法可以减少处理时间,但保留内存的时间更长。我想我的新方法暂时需要更多的处理和更多的内存,但是潜在的大型结果集对象的寿命不会那么长。

    推荐文章