首页 > 解决方案 > 有条件地将 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(); 

调用此方法时。我收到一个空集合。

标签: phpajaxlaraveleloquent

解决方案


您的想法和方法是正确的,但是您正在混合LIKE=查询。%是通配符,但只能与 . 一起使用LIKE

所以,如果你想使用通配符和LIKE

if(!empty($gender)) {
    $productsQuery->where('gender', 'LIKE', "%$gender%");
}

或者,如果您想通过精确文本进行匹配,

if(!empty($gender)) {
    $productsQuery->where('gender', $gender);
}

例如,您当前的代码将搜索文字 string 的完全匹配%male%

请记住,通过使用通配符,male也将匹配female(因为它们都包含“男性”一词)。


推荐阅读