Я пытаюсь найти две необязательные таблицы, используя красноречивый:
$users = User::where('ProfileType', '=', 2) ->where(function($query) { $query->where('BandName', 'LIKE', "%$artist%"); $query->or_where('Genre', 'LIKE', "%$genre%"); })->get();
Это отлично подходит для возврата всех результатов, когда пользователь выполняет пустой поиск, но я не уверен, как настроить это для поиска имени диапазона, когда это присутствует, и наоборот.
Просто, чтобы объяснить, что происходит в ответ ниже:
Eloquent делает сложную вещь здесь: когда вы вызываете User::where(...)
он возвращает объект Database \ Query . Это в основном то же самое, что DB::table('users')->where(...)
, цельный объект для построения SQL-запросов.
Итак, имея:
// Instantiates a Query object $query = User::where('ProfileType', '=', '2'); $query->where(function($query) { // Adds a clause to the query if ($artist = Input::get('artist')) { $query->where_nested('BandName', 'LIKE', "%$artist%", 'OR'); } // And another if ($genre = Input::get('genre')) { $query->where_nested('Genre', 'LIKE', "%$genre%", 'OR'); } }); // Executes the query and fetches it's results $users = $query->get();
Основываясь на ответе Виниция, вот что получилось:
// Instantiates a Query object $query = User::where('ProfileType', '=', '2'); // Adds a clause to the query if ($artist = Input::get('artist')) { $query->where('BandName', 'LIKE', "%$artist%"); // Temp Usernamesearch $query->or_where('NickName', 'LIKE', "%$artist%"); } // Genre - switch function if artist is not empty if ($genre = Input::get('genre')) { $func = ($artist) ? 'or_where' : 'where'; $query->$func('Genre', 'LIKE', "%$genre%"); } // Executes the query and fetches it's results $users = $query->get();
Оказывается, что второе необязательное поле должно использовать or_where, только если $ artist не установлен.
Спасибо за вашу помощь
Я думаю, что это то, что тебе нужно. Ваше представление будет иметь форму для поиска исполнителя / жанра, который может быть установлен, или обоих, или ни одного.
$users = User::where('ProfileType', '=', 2); if (Input::has('artist')) { $users = $users->where('BandName', 'LIKE', '%'.Input::get('artist').'%'); } if (Input::has('genre')) { $users = $users->where('Genre', 'LIKE', '%'.Input::get('genre').'%'); } $users = $users->get();