我正在尝试为用户创建一种搜索网站上所有产品的方法。当他们搜索"伯顿滑雪板"时,我只希望带有伯顿品牌的滑雪板出现在结果中。但是,如果他们只搜索"伯顿",那么应该会出现所有带有伯顿品牌的产品。
这是我试图写的,但由于多种原因不起作用。
控制器:
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('/');
}
我正在尝试重新创建针对此 stackoverflow.com 问题给出的第一个解决方案
我发现的第一个问题是我试图爆炸$input
,但它已经是一个数组。所以我不确定如何解决这个问题。而我写->whereRaw(". implode(' AND ', $searchTermBits) . ")
的方式,我肯定是不正确的。我不确定如何解决这些问题,任何见解或解决方案将不胜感激。
您需要
从输入字段中获取术语,并在构建数据库查询时遍历所有术语。您还需要设置要在其中搜索术语的表字段,在此示例中,表字段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();
}
我为拉拉维尔做了一个插件来制作这个!希望您使用它并提供反馈。您可以指定每列的相关性并使用其他表中的信息
https://github.com/nicolaslopezj/searchable
你可以像这样搜索
$products = Product::search($query)->get();
控制器功能 1
public function search() {
$q = Input::get('searchKeyWords');
$users = DB::table('users');
$results = $users->where('name', 'LIKE', '%'. $q .'%')
->orWhere('email', 'LIKE', '%'. $q .'%')
->orWhere('password', 'LIKE', '%'. $q .'%')
->get();
return View::make('users.search')->with('users', $results);
}
控制器功能2
public function search() {
$q = Input::get('searchKeyWords');
$results = User::where('name', 'LIKE', '%'. $q .'%')
->orWhere('email', 'LIKE', '%'. $q .'%')
->orWhere('password', 'LIKE', '%'. $q .'%')
->get();
return View::make('users.search')->with('users', $results);
}
控制器功能3
public function search() {
$results = User::where('name', 'LIKE', '%'. Input::get('searchKeyWords') .'%')
->orWhere('email', 'LIKE', '%'. Input::get('searchKeyWords') .'%')
->orWhere('password', 'LIKE', '%'. Input::get('searchKeyWords') .'%')
->get();
return View::make('users.search')->with('users', $results);
}
这是我尝试将 Eloquent 与许多搜索词一起使用时的示例
public function search() {
$q = Input::get('myInputField');
$searchTerms = explode(' ', $q);
$query = $article->where('title', 'LIKE', "%{$keyword}%")
->orWhere('description', 'LIKE', "%{$keyword}%");
foreach($searchTerms as $term)
{
$query = $query->orWhere('name', 'LIKE', '%'. $term .'%');
}
$results = $query->get();
}
您也可以->get()
函数更改为其他结果,例如->paginate()
,它应该类似于$results = $query->paginate(10);