Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel搜索关键字查询_Php_Mysql_Laravel - Fatal编程技术网

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
引擎是什么?