我正在尝试为用户创建一种搜索网站上所有产品的方法.当他们搜索"burton滑雪板"时,我只想在结果中出现带有品牌burton的滑雪板.但如果他们只搜索"burton",那么所有带有品牌burton的产品都应该出现.
这是我试图写的但由于多种原因而无法工作.
控制器:
public function search(){
$input = Input::all();
$v= Validator::make($input, Product::$rules);
if($v->passes())
{
$searchTerms = explode(' ', $input);
$searchTermBits = array();
foreach ($searchTerms as $term) {
$term = trim($term);
if (!empty($term)){
$searchTermBits[] = "search LIKE '%$term%'";
}
}
$result = DB::table('products')
->select('*')
->whereRaw(". implode(' AND ', $searchTermBits) . ")
->get();
return View::make('layouts/search', compact('result'));
}
return Redirect::route('/');
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试为此stackoverflow.com问题重新创建第一个解决方案
我发现的第一个问题是我试图爆炸$input,但它已经是一个数组.所以我不确定如何解决这个问题.我写的方式->whereRaw(". implode(' AND ', $searchTermBits) . "),我肯定是不正确的.我不知道如何解决这些问题,任何见解或解决方案都将受到高度赞赏.
afa*_*zit 18
您需要从输入字段中获取术语,并在构建数据库查询时循环遍历所有这些术语.您还需要设置要在其中搜索术语的表字段,在此示例中为表字段name.这是一个未经测试的例子,但你会明白这个想法.
public function search() {
$q = Input::get('myInputField');
$searchTerms = explode(' ', $q);
$query = DB::table('products');
foreach($searchTerms as $term)
{
$query->where('name', 'LIKE', '%'. $term .'%');
}
$results = $query->get();
}
Run Code Online (Sandbox Code Playgroud)
我为laravel制作了一个插件来制作它!希望您使用它并提供反馈.您可以指定每列的相关性,并使用其他表中的信息
https://github.com/nicolaslopezj/searchable
你可以这样搜索
$products = Product::search($query)->get();
Run Code Online (Sandbox Code Playgroud)