2014-02-27 61 views
1

我正在使用Catalyst框架通过浏览器访问MySQL数据库。用户可以使用特定的ID(汽车牌照)和/或特定的汽车颜色从搜索框搜索数据库。MySQL搜索在Catalyst框架中无法正常工作

问题是,当我搜索数据库中存在的某些ID时,它们不会显示在结果中,而其他人会这样做。如果我在浏览器中手动更改网址,我测试的所有ID都可以正确访问,所以我想问题在于我的搜索功能。

我在控制器的功能是这个

sub search : Local : Args(0) { 

    my ($self, $c) = @_; 

    my $schema   = $c->model('DB'); 
    my $car_plate  = $c->request->params->{car_plate} || 'N/A'; 
    my $car_model  = $c->request->params->{car_model} || 'N/A'; 
    my $result_set  = ""; 
    my $result_set_count = 0; 

    if (($car_plate ne 'N/A') && ($car_model ne 'Select model')) { # car plate AND car model entered 
    $result_set = [ 
     $schema->resultset('Car')->search({ 
      'plates' => { 'like', '%' . $car_plate . '%' }, 
      'colors' => $car_model 
     }, 
    )->all 
    ]; 
    } 

    elsif (($car_plate eq 'N/A') && ($car_model ne 'Select model')) { # car plate blank, car model entered 
    $result_set = [ 
     $schema->resultset('Car')->search(
     { 'colors' => $car_model }, 
    )->all 
    ]; 
    } 

    elsif (($car_plate ne 'N/A') && ($car_model eq 'Select model')) { # car plate entered, car model blank 
    $result_set = [ 
     $schema->resultset('Car')->search(
     { 'plates' => { 'like', '%' . $car_plate . '%' } }, 
    )->all 
    ]; 
    } 

    if (($car_plate ne 'N/A') && ($car_model ne 'Select model')) { 
    $result_set_count = $c->model('DB::Car')->search({ 
     'plates' => { 'like', '%' . $car_plate . '%' }, 
     'colors' => $car_model 
     } 
    )->all; 
    } 
    elsif (($car_plate eq 'N/A') && ($car_model ne 'Select model')) { 
    $result_set_count = $c->model('DB::Car')->search({ 'colors' => $car_model })->all; 
    } 
    elsif (($car_plate ne 'N/A') && ($car_model eq 'Select model')) { 
    $result_set_count = $c->model('DB::Car')->search({ 'plates' => { 'like', '%' . $car_plate . '%' } })->all; 
    } 

    my $error_message = ""; 

    if ($result_set_count == 0) { 

    $error_message = "<p>Not found</p>"; 
    $c->stash(
     errorcount => $error_message, 
     Cars  => $result_set, 
     template => 'cars/search_no_results.tt' 
    ); 
    } 
    else { 

    $c->stash(
     errorcount => $error_message, 
     Cars  => $result_set, 
     template => 'cars/search_cars.tt' 
    ); 
    } 

    $c->response->header('Cache-Control' => 'no-cache'); 
} 

回答

3

$ result_set_count将是一个数组(你不实际使用count()函数)

$result_set_count = $c->model('DB::Car')->search({ 'plates' => { 'like', '%' . $car_plate . '%' } })->all; 
更换线路

by

$result_set_count = $c->model('DB::Car')->count('plates' => { 'like', '%' . $car_plate . '%' }); 

然后,一旦做每个DB查询优化你的代码:

my $rs = $c->model('DB::Car')->search_rs({ ... }, { }); 
my $count = $rs->count; 
my $set = [ $rs->all ]; 
+0

非常感谢您的帮助。我遵循你的建议,但不幸的是它不能正常工作。当我击中数据库中存在的特定ID时,它将返回未找到。我也看到这个输出:DBIx :: Class :: ResultSet :: count():search(%condition)已被废弃,请使用search(\%condition)。我究竟做错了什么? –

+0

my $ rs = $ c-> model('DB :: Car') - > search({'plates'=> {'like','%'。$ car_plate。'%'}},{}) – Julien

+0

再次感谢你的帮助。仍然不起作用。现在奇怪的是,如果我想看看ID:14367的结果,它会呈现一个空的结果表而不是未找到的消息。但是当我搜索1436时,它在结果表中呈现ID为14367的记录。 –