猿问

Laravel 搜索关键字查询

因此,目前我已经创建了搜索文本字段来查找数据库特定列的关键字。


用这个口才


$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它不会返回任何数据


慕尼黑5688855
浏览 145回答 2
2回答

慕桂英3389331

第一: 提取关键词:$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();您将需要执行循环,因为您不知道搜索结果中的关键字数量

HUWWW

你可以像这样使用explode PHP函数:$keywords = explode(' ', $keyword); // Will return an array containing each keyworddd($keywords);如果您的关键字可以包含空格,您可能应该考虑使用其他分隔符或拆分查询参数。
随时随地看视频慕课网APP
我要回答