为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 搜索关键字查询

Laravel 搜索关键字查询

PHP
慕尼黑5688855 2023-09-08 16:45:28
因此,目前我已经创建了搜索文本字段来查找数据库特定列的关键字。用这个口才$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.00Price 的值,与 的列匹配的所有可能值content, title, quantity, price, quantity将自动返回数据。如果我尝试搜索这样的关键字怎么办234.00 BooksPrice和的值Title。它现在不会返回任何数据。因为它只会匹配特定列上的这句话。我想做的是如果我搜索这样的东西= 234.00 Books 20*Value of Price, Title and Quantity它应该返回每列上匹配的所有数据。字母无论小写还是大写只要符合字母的位置即可那可能吗?** 更新 **目标:只想匹配234任何列上的值。成为结果。但我的查询的问题是,如果我添加另一个类似的关键字,234 Books它不会返回任何数据
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

第一: 提取关键词:


$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();

您将需要执行循环,因为您不知道搜索结果中的关键字数量


查看完整回答
反对 回复 2023-09-08
?
HUWWW

TA贡献1874条经验 获得超12个赞

你可以像这样使用explode PHP函数:

$keywords = explode(' ', $keyword); // Will return an array containing each keyword

dd($keywords);

如果您的关键字可以包含空格,您可能应该考虑使用其他分隔符或拆分查询参数。


查看完整回答
反对 回复 2023-09-08
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信