Intereting Posts
Нужна помощь для хранения флажка, переключателя и выпадающих меню в mysql Производительность MySQL – несколько запросов или один неэффективный запрос? Аутентификация с помощью Facebook (PHP SDK) и Codeigniter Yii2: как добавить идентификатор модели и модели в mPDF Каков наилучший способ дезинфекции пользовательских ресурсов? PHP exif_read_data больше не извлекает местоположение GPS PHP json_decode возвращает пустой массив Как получить ссылочный сайт, с которого пользователь перешел в arive на моем сайте с помощью PHP? Сессия потеряна после перенаправления страницы в php Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос Как исправить ошибку: laravel.log не удалось открыть? Быстрая ошибка почтовой программы 'Swift_RfcComplianceException' в электронной почте, которая действительно работает? Установить переменную сеанса с помощью javascript при отправке заголовков CURLOPT_HEADER возврату данных не поступало. PHP CURL php imagic конвертировать PNG в jpg

Создание функции поиска с помощью Laravel 4

Я пытаюсь создать способ для пользователей искать все продукты на веб-сайте. Когда они ищут «сноуборды Буртона», я только хочу, чтобы в результатах появились сноуборды с бренном 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('/'); } 

Я пытаюсь воссоздать первое решение, данное для этой проблемы stackoverflow.com

Первая проблема, которую я определил, заключается в том, что я пытаюсь взорвать $input , но это уже массив. Поэтому я не уверен, как это сделать. И способ, которым я написал ->whereRaw(". implode(' AND ', $searchTermBits) . ") , Я уверен, что это неверно. Я не уверен, как исправить эти проблемы, но любые идеи или решения будут высоко оценены.

Solutions Collecting From Web of "Создание функции поиска с помощью Laravel 4"

Вам нужно будет получить условия из своего поля ввода и пропустить все их при построении запроса БД. Вам также необходимо установить поле таблицы, в котором вы хотите выполнить поиск условий, в этом примере поле таблицы – это 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(); } 

Я сделал плагин для laravel, чтобы сделать это! Надеюсь, вы используете его и даете обратную связь. Вы можете указать релевантность для каждого столбца и использовать информацию из других таблиц

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