laravel 如何忽略数据库字段的特殊字符时,做一个'LIKE'查询?

t3psigkw  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(188)

我想请求您的帮助,因为我在创建Laravel查询时遇到了困难。
下面是我当前的代码:

$products = Product::where(function($query) use ($searchTerm) {
   $query->where('product_name', 'LIKE', "%$searchTerm%");
   $query->orWhere('product_category', 'LIKE', "%$searchTerm%");
   $query->orWhere('product_description', 'LIKE', "%$searchTerm%");
   })
   ->where('lang', '=', 'en')
   ->orderBy('product_name', 'ASC')
   ->get();

如果我有一个名为 * Michael's Handsoap * 的产品,用户使用关键字 "Michaels" 进行搜索,上面的查询将不会返回任何结果。在您执行查询时,是否有方法从数据库字段中删除特殊字符?如果您有任何输入,我们将不胜感激。
谢谢!

    • EDIT:**认为最好只添加一个product_name_search列,该列包含去掉特殊字符的产品名称(例如,使用preg_replace("/[^A-Za-z0-9 ]/", '', $productName)

这样就可以使用$query->where('product_name_search', 'LIKE', "%$searchTerm%")了,它增加了一个参数,但至少现在已经涵盖了所有参数。

vfh0ocws

vfh0ocws1#

尝试使用MySQL函数(如TRIM()REPLACE())删除查询时的特殊字符。

$products = Product::where(function($query) use ($searchTerm) {
    $query->where('product_name', 'LIKE', "%".trim($searchTerm, "!@#")."%");
    $query->orWhere('product_category', 'LIKE', "%".trim($searchTerm, "!@#")."%");
    $query->orWhere('product_description', 'LIKE', "%".trim($searchTerm, "!@#")."%");
})
->where('lang', '=', 'en')
->orderBy('product_name', 'ASC')
->get();

相关问题