【问题标题】:Laravel Eloquent: how to display all rows if search text field is emptyLaravel Eloquent:如果搜索文本字段为空,如何显示所有行
【发布时间】:2021-10-05 00:18:49
【问题描述】:

如果有值先演示一下:

文本字段:

<input type="text" id="search_category" class="search_category" placeholder="Search by Category" value="a">

Ajax 函数:(显示正在获取的文本字段中的数据)

var search_category = $('#search_category').val();
------------------------------------------
    $.ajax({
    type: "GET",
    url: "/clinical/bbr-category-configuration-data/"+search_category,

SQL 选择:

public function fetchcategory($search_category){
    $all_categories = HmsBbrCategory::query()
                                    ->when(empty($search_category), function ($query) {
                                        $query->where('category_id', '>=', '1');
                                    })
                                    //iLike is case insensitive
                                    ->when(!empty($search_category), function ($query) use ($search_category) {
                                        $query->where('category_name', 'iLIKE', "%$search_category%");
                                    })    
                                      ->orderBy('category_id', 'ASC')
                                      ->get(); }

由于我的文本字段有value="a",查询触发!empty(),显示:

我的问题是,如果我将文本字段更改为空白的 value="" 并触发 when(empty()),则行不显示,我收到错误

404 not found
"message": "",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",

如果我的文本字段为空,如何阻止此错误的发生?

总结:如果搜索值为空,则尝试输出所有行,现在出现 404 错误

更新:试过了,如果文本字段为空,我仍然无法搜索

    url: "/clinical/bbr-category-configuration-data/?search="+search_category,
    Route::get('/bbr-category-configuration-data/?search={search_category}', [BBRCategoryConfigurationController::class,'fetchcategory']);

    $search_category = request('search');
    $all_categories = HmsBbrCategory::query()
                                    ->when(empty($search_category), function ($query) {
                                        $query->where('category_id', '>=', 1);
                                    })
                                    //iLike is case insensitive
                                    ->when(!empty($search_category), function ($query) use ($search_category) {
                                        $query->where('category_name', 'iLIKE', "%$search_category%");
                                    })    
                                      ->orderBy('category_id', 'ASC')
                                      ->get();

【问题讨论】:

    标签: laravel search eloquent http-status-code-404 is-empty


    【解决方案1】:

    您需要拆分逻辑而不是链接when 方法,如下所示:

    public function fetchcategory($search_category){
        $all_categories = HmsBbrCategory::query();
        if (empty($search_category)) {
            $all_categories->where("category_id", ">=", 1);
        } else {
            $all_categories->where("category_name", "iLIKE", "%$search_category%");
        }
    
        return $all_categories->orderBy("category_id"; "ASC")->get();
    }
    

    【讨论】:

      【解决方案2】:

      我认为发生 404 可能是因为您没有注册正确的路线/clinical/bbr-category-configuration-data。不要将 search_category 作为 url 路由传递,而是尝试像这样将其作为查询字符串传递。

      /clinical/bbr-category-configuration-data/?search=" + search_category
      

      然后您可以通过控制器内的请求助手获取此值

      $search_category = request('search');
      

      确保您在 web.php 或 api.php 文件中注册了正确的路由。

      【讨论】:

      • 试过了,空白时仍然无法搜索(尝试在路线中使用和不使用括号)
      【解决方案3】:

      尝试删除 1 周围的引号。它现在被视为字符串,而不是整数。该行应该是:

      $query->where('category_id', '>=', 1);
      

      更新

      您还应该更新您的路线,例如:

       Route::get('/bbr-category-configuration-data', [BBRCategoryConfigurationController::class,'fetchcategory']);
      

      Ajax 函数:

      var search_value = $('#search_category').val();
      
      $.ajax({
          type: "GET",
          data:{search_categoy:search_value},
          url: "/clinical/bbr-category-configuration-data/",
      

      在你的方法中:

      $search_category = request('search_category');
      

      由于您声明路线的方式,您会收到 404。由于您已将“search_category”声明为您的路由参数,因此您将始终必须为其传递一个值。因此,它在为参数传递值时起作用。但是当参数保持为空时,它会抛出“404 Not found”错误。因为 Laravel 期待 search_category 参数的值,但找不到。

      【讨论】:

      • 问题仍然相同,但这可能是另一个修复。当我的主要问题得到解决时,这个错误很可能会出现。
      • 问题出在你的路由配置上。我刚注意到。如果您这样声明您的路线,您将始终必须为 search_category 传递一个值。更好的解决方案是在路由器中声明不带查询参数的 url。之后您将不再获得 404。
      • 我已经根据问题更新了我的答案并分享了解决问题的代码
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      相关资源
      最近更新 更多