Laravel Eloquent:如果搜索文本字段为空,如何显示所有行
Posted
技术标签:
【中文标题】Laravel Eloquent:如果搜索文本字段为空,如何显示所有行【英文标题】:Laravel Eloquent: how to display all rows if search text field is empty 【发布时间】: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();
【问题讨论】:
【参考方案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。 我已经根据问题更新了我的答案并分享了解决问题的代码以上是关于Laravel Eloquent:如果搜索文本字段为空,如何显示所有行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Eloquent 在包含对象数组的 json 字段中进行搜索