2

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

上記のコードは正常に動作します。私がしたいのは、1つの列だけでなくfirstname、または他の列と一致するテーブルを検索することです。lastname

私は Catalyst フレームワークと Perl にかなり慣れていないので (perl を使用したことはありますが、あまり高度ではありません)、ヘルプとヒントをいただければ幸いです。

4

1 に答える 1

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は、1 行だけを検索します。

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

すべての行を見つけるには、メソッドsearchまたはを使用する必要がありますsearch_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 %]
于 2013-04-18T19:20:26.923 に答える