2013-04-18 1 views
2

SQLite 데이터베이스에 테이블이 있고 Account라는 스키마가 있습니다. 또한 사용자를 검색하는 양식이 있습니다. 내 컨트롤러에서이 작업을 수행합니다.Perl 복수 열을 검색하는 Catalyst 함수 검색

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

위의 코드는 정상적으로 작동합니다. 내가하고 싶은 일은 firstname, lastname 또는 하나의 열 대신 다른 열과 일치하는 테이블을 검색하는 것입니다.

저는 Catalyst 프레임 워크와 Perl에 매우 익숙합니다. (매우 진보 된 것은 아니지만 perl로 처리했습니다.) 도움과 팁을 주시면 감사하겠습니다. 이것에 관해서

+0

: 추가 정보를 위해 당신은 당신이 사용해야 당신의 TT 파일에 결과를 확인하기 위해 DBIx::Class::ResultSet

UPD

을 읽을 필요 [%를 results.email | html %]
[% results.firstname | html %] 또한이 예제에서는 [% IF ... %] 문이 필요하지 않으며 잘못되었을 수도 있습니다 (IF search_results.size> 0) – Julien

+0

팁을 주셔서 감사합니다. – Grigor

답변

2

: 테이블로부터 행을 검색하는 바와

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

: 같이

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

동일. 방법 find은 단 하나의 행을 찾습니다. 당신이 방법 search 또는 search_rs를 사용해야합니다 모든 행을 찾기 위해

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

. 이 같은 것 :

$c->stash->{search_results} = $c->model("DB::Account")->search({ 
     firstname => { like => "%$search_term%" }, 
     lastname => "Smith", 
     email => "[email protected]" 
}) 

그게 전부입니다! XSS를 방지하기 위해 당신은 당신의 변수를 탈출해야

[% WHILE (row = search_results.next) %] 
[% row.email %] 
[% row.firstname %] 
[% END %] 
+0

왜'lastname => "Smith"','email => "[email protected]"'? 성 => {like => "% $ search_term %"}, 이메일 => {like => "% $ search_term"} 할 수 있습니까? – Grigor

+0

물론 다른 값을 사용할 수도 있습니다. 그것은 단지 예입니다. – edem

+0

하지만 아무 것도 반환하지 않습니다. 내보기에서 목록을 어떻게 생성합니까? – Grigor