我在表格产品中有字段pruduct_name product_name的记录是
当我搜索“消防栓盒类型c”时,我想做的是 那么只会显示带有“ c型”的消防栓框。
我尝试过这些:
$prd_name= str_replace(' ','.+',$query);
$get_data = DB::table('product')->whereRaw('product_name regexp "'.$prd_name.'"')->select("product_name as name")->get();
但是结果还显示了另一种类型
答案 0 :(得分:1)
使用此模式和关键世界类似:
$users = DB::table('product')
->where('name', 'like', '%Hydrant box%type c%')
->get();
此代码将搜索名称中带有“ T”的产品。尝试采用它。
这里有文档和更多示例:https://laravel.com/docs/5.8/queries#where-clauses
祝你好运!
答案 1 :(得分:0)
警告::此答案不涵盖Mysql REGEXP
。
这只是使用Mysql LIKE和PHP的解决方法:
使用php explode按单词划分搜索参数,然后对每个单词使用where
条件。
尝试下面给出的代码:
//get user input
$searchParam = $request->get('search_field_name');
//split user input to words array
$searchParamArr = explode(" ", $searchParam);
$query = Product::query;
//loop through each word
foreach ($searchParamArr as $value) {
//apply where condition with each word
$query = $query->where("product_name", "LIKE", $value);
}
$get_data = $query->get();
这将根据您的示例数据进行。但是在以下情况下会出现问题:
您的数据:
室内A1型消防栓盒
消防栓A1 室内打字机
即使以上数据有所不同,但两者都有相同的用词。
如果您搜索Hydrant Box A1
,代码将返回两行。