Perl Catalyst搜索功能可搜索多个列

时间:2013-04-18 18:58:00

标签: perl catalyst

我在SQLite数据库中有一个表,我有一个名为Account的模式。我还有一个搜索用户的表单。在我的控制器中,我这样做:

my $params ||= $c->req->parameters; # Don't know what the difference is between ||= and =, did that way because someone had done it to and it works
my $search_term = $params->{search};

if( $c->request->params{submit} )
{
    $c->stash->{search_term} = $search_term;

    $c->stash->{search_results} = $c->model("DB::Account")->find({
        firstname => { like => "%$search_term%" },
    }) if $c->stash->{search_term};
}

然后在我看来,我有类似的东西。

[% IF search_results > 0 %]
  [% FOREACH results IN search_results %]
    [% results.email %] <br/>
    [% results.firstname %]
[% END %]

上面的代码工作正常。我想要做的是搜索与firstnamelastname或其他列匹配的表格,而不只是一列。

我对Catalyst框架和Perl相当陌生(曾经用perl做过,但不是很高级),所以任何帮助和技巧都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

至于此:

my $params ||= $c->req->parameters; 

与:

相同
my $params = $params || $c->req->parameters; # when $params is not defined 
                                             # it will be used the part after ||

从表中搜索行。方法find只能找到一行。

$c->stash->{search_results} = $c->model("DB::Account")->find({
        firstname => { like => "%$search_term%" },            
});

要查找所有行,您应使用方法searchsearch_rs。像这样:

$c->stash->{search_results} = $c->model("DB::Account")->search({
        firstname => { like => "%$search_term%" },
        lastname => "Smith",
        email => "jsmith@abc.de"
})

这就是全部!有关详细信息,请阅读DBIx::Class::ResultSet

<强> UPD

要在tt文件中查看结果,您应该使用:

[% WHILE (row = search_results.next) %]
[% row.email %]
[% row.firstname %]
[% END %]
相关问题