php - 有条件地将 where 子句添加到 eloquent 查询
问题描述
我有一个产品数据库。我允许用户输入搜索词并显示与他们的搜索词相关的产品。我想为用户添加使用 AJAX 通过“性别”进一步过滤这些结果的能力。如果用户从选择框中选择性别,则会将其发送到 URL 查询字符串。
这是我负责检测“性别”是否在查询字符串中的代码。
$searchTerm = request('s');
$gender = request('gender');
$productsQuery = DB::table('products')
->where('title', 'LIKE', "%$searchTerm%");
if ($gender != "") {
$productsQuery->where('gender', '=', "%$gender%");
}
$productsQuery->get();
调用此方法时。我收到一个空集合。
解决方案
您的想法和方法是正确的,但是您正在混合LIKE
和=
查询。%
是通配符,但只能与 . 一起使用LIKE
。
所以,如果你想使用通配符和LIKE
,
if(!empty($gender)) {
$productsQuery->where('gender', 'LIKE', "%$gender%");
}
或者,如果您想通过精确文本进行匹配,
if(!empty($gender)) {
$productsQuery->where('gender', $gender);
}
例如,您当前的代码将搜索文字 string 的完全匹配%male%
。
请记住,通过使用通配符,male
也将匹配female
(因为它们都包含“男性”一词)。
推荐阅读
- sql - SQL 在创建数据库应用程序中的作用是什么
- python - 将 Python 作为 Windows 服务运行 - 使用模块调用另一个 Python 脚本
- php - mysql使用触发器更新另一个表
- ruby-on-rails - Ransack 中关联模型的访问属性
- c# - 使用依赖注入在工作线程中实例化对象
- arrays - 在 Swift 中对 2 个链接数组进行排序?
- java - 如何为原始 JSON + JSON(B) PostgreSQL 实现 Hibnernate 类型
- azure - 删除后安装不重新安装
- python - Django/Python - views.py 中不需要的实例缓存
- google-spreadsheet-api - 更新范围未知的单元格值(Google SpreadSheets API v4)