Php Laravel搜索关键字查询
所以,目前我已经创建了搜索文本字段来查找数据库特定列的关键字 用这个口才Php Laravel搜索关键字查询,php,mysql,laravel,Php,Mysql,Laravel,所以,目前我已经创建了搜索文本字段来查找数据库特定列的关键字 用这个口才 $data = DB::table('product') ->select('product.id','product.title','product.description','product.content','product.photo','product.quantity','product.price') ->join('product_per_category','p
$data = DB::table('product')
->select('product.id','product.title','product.description','product.content','product.photo','product.quantity','product.price')
->join('product_per_category','product_per_category.product_id','=','product.id')
->where(['product.deleted' => 0])
->where(['product_per_category.deleted' => 0])
->where(['product_per_category.productcategory_id' => $id])
->where(function($query) use ($keyword){
$query->where('product.content', 'like', '%' . $keyword . '%')
->orWhere('product.title', 'like', '%' . $keyword . '%')
->orWhere('product.quantity', 'like', '%' . $keyword . '%')
->orWhere('product.price', 'like', '%' . $keyword . '%');
})
->groupBy('product.id')
->paginate(10);
如果我尝试搜索价格的234.00
值,则与内容、标题、数量、价格、数量列匹配的所有可能值将自动返回数据
如果我试图搜索像这样的关键字
234.00书籍
价值价格
和标题
。它现在不会返回任何数据。因为它将只匹配特定列上的这句话
我想做的是如果我搜索像这样的东西
=234.00书籍20
*价格、标题和数量的价值
它应该返回每列上匹配的所有数据。无论字母是小写还是大写,只要它与字母的位置相匹配
可能吗
**更新**
目标:只想匹配任何列上的234
值。这是结果。但我查询的问题是,如果我添加另一个关键字,如234 Books
,它不会返回任何数据您可以这样使用:
$keywords = explode(' ', $keyword); // Will return an array containing each keyword
dd($keywords);
如果您的关键字可以包含空格,您可能需要考虑使用另一个分隔符或拆分查询参数。
可以使用如下:
$keywords = explode(' ', $keyword); // Will return an array containing each keyword
dd($keywords);
如果您的关键字可以包含空格,则可以考虑使用另一个分隔符或拆分查询参数。
<强>第一:< /强>
提取关键字:
$delimeter = ' '; //or your separator
$keywords = explode($delimeter, $search); // Will return an array containing each keyword
然后:循环每个关键字,调用搜索查询或动态扩展查询
示例
像这样的东西应该有用
$base_query = DB::table('product')
->select('product.id','product.title','product.description','product.content','product.photo','product.quantity','product.price')
->join('product_per_category','product_per_category.product_id','=','product.id')
->where(['product.deleted' => 0])
->where(['product_per_category.deleted' => 0])
->where(['product_per_category.productcategory_id' => $id]);
foreach($keywords as $keyword){
$base_query->where(function($query) use ($keyword){
$query->where('product.content', 'like', '%' . $keyword . '%')
->orWhere('product.title', 'like', '%' . $keyword . '%')
->orWhere('product.quantity', 'like', '%' . $keyword . '%')
->orWhere('product.price', 'like', '%' . $keyword . '%');
})
}
$result = $base_query->get();
您需要执行循环,因为您不知道搜索结果中的关键字数量。首先:
提取关键字:
$delimeter = ' '; //or your separator
$keywords = explode($delimeter, $search); // Will return an array containing each keyword
然后:循环每个关键字,调用搜索查询或动态扩展查询
示例
像这样的东西应该有用
$base_query = DB::table('product')
->select('product.id','product.title','product.description','product.content','product.photo','product.quantity','product.price')
->join('product_per_category','product_per_category.product_id','=','product.id')
->where(['product.deleted' => 0])
->where(['product_per_category.deleted' => 0])
->where(['product_per_category.productcategory_id' => $id]);
foreach($keywords as $keyword){
$base_query->where(function($query) use ($keyword){
$query->where('product.content', 'like', '%' . $keyword . '%')
->orWhere('product.title', 'like', '%' . $keyword . '%')
->orWhere('product.quantity', 'like', '%' . $keyword . '%')
->orWhere('product.price', 'like', '%' . $keyword . '%');
})
}
$result = $base_query->get();
您需要执行一个循环,因为您不知道搜索结果中的关键字数量可以通过正则表达式从字符串值提取到变量。或者不同的方法应该在php中按“”分解字符串(空格),并对每个关键字where执行循环。在您的方法中,将234.00、Books、20作为单独的值在该列中搜索。问题是,您如何知道用户是否将234作为价格或数量等。只想在任何列上匹配234值。这是结果。但我的查询的问题是,如果我添加另一个关键字,如234 Books
,它不会返回任何dataokey,因此您需要以某种方式指定输入的分隔方式。如果您有这样的规则,您可以实现下面发布的方法:您使用的mysql引擎是什么?可以通过正则表达式从字符串值提取到变量。或者不同的方法应该在php中按“”分解字符串(空格),并对每个关键字where执行循环。在您的方法中,将234.00、Books、20作为单独的值在该列中搜索。问题是,您如何知道用户是否将234作为价格或数量等。只想在任何列上匹配234值。这是结果。但我的查询的问题是,如果我添加另一个关键字,如234 Books
,它不会返回任何dataokey,因此您需要以某种方式指定输入的分隔方式。如果您有这样一个规则,您可以实现下面发布的方法:您使用的mysql引擎是什么?