【问题标题】:Perl Catalyst search function to search multiple columnsPerl Catalyst 搜索功能可搜索多列
【发布时间】:2013-04-20 03:40:15
【问题描述】:

我在 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 做过一些事情,但不是很先进),所以任何帮助和提示都将不胜感激。

【问题讨论】:

  • 您应该转义变量以防止 XSS:[% results.email | html %]
    [% results.firstname | html %] 另外,在这个例子中,你的 [% IF ... %] 语句是不需要的并且可能是错误的(IF search_results.size > 0)
  • 感谢您的提示,将尝试那些

标签: perl catalyst


【解决方案1】:

至于这个:

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 %]

【讨论】:

  • 为什么是lastname =&gt; "Smith"email =&gt; "jsmith@abc.de"?我可以做 lastname => {like => "%$search_term%"}, email => {like => "%$search_term"}, 吗?
  • 但是它什么也没返回,我将如何在我的视图中生成列表?
  • 尝试使用search_rs 而不是search
  • 没有结果,我会玩它,让你知道会发生什么
  • @Grigor 向我展示您的 DB 模型中的 Account.pm 文件并编写您想要执行的 sql 语句?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多