MySQL 搜索在 Catalyst 框架中无法正常工作

标签 mysql perl search catalyst

我正在开发一个 MySQL 数据库,该数据库可使用 Catalyst 框架通过浏览器访问。用户可以使用特定 ID(车牌)和/或特定汽车颜色从搜索框中搜索数据库。

问题是,当我搜索数据库中存在的某些 ID 时,它们不会出现在结果中,而其他人会出现。如果我在浏览器中手动更改URL,我测试的所有ID都可以正常访问,所以我猜问题出在我的搜索功能上。

我在 Controller 中的功能是这样的

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');
}

最佳答案

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

像这样替换行

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

通过

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

然后,通过对每个数据库查询执行一次来优化您的代码:

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

关于MySQL 搜索在 Catalyst 框架中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078864/

相关文章:

PHP - 想要将 MySQL Timestamp 时间转换为 UTC +6 时间

regex - perl正则表达式匹配元音和辅音

arrays - 在 Perl 数组中保存命令行选项的多个值

java - 除了模板特定从搜索中排除页面之外,还有其他替代方法吗

linux - 如何比linux命令的 "grep"更快地搜索文本文件中的单词?

mysql - Django 在数据库更改时更新 models.py

MySQL 数据库在 Apache Solr 上建立索引,如何通过 URL 访问它

perl - 在 Perl 中对字母数字哈希键进行排序?

Python - 跨 CSV 中多列的 Numpy 搜索

mysql - 在 nodejs 中导出 var,其中包含与 MySQL 的连接的创建