Итак, я пытаюсь настроить страницу поиска, и она имеет несколько опций get. Но мне любопытно, как правильно это настроить, я знаю, что это далеко не так, как я делаю, если операторы внутри установки переменной, но я Я так потерян прямо сейчас.
Любая помощь будет принята с благодарностью.
public function index()
{
$queryUsername = Request::get('u');
$queryPostcode = Request::get('p');
$queryOrderbyPhotos = Request::get('o1');
$queryOrderbyOnline = Request::get('o2');
$queryOrderbyTypes = Request::get('o3');
$users = User::rightJoin('user_profiles','users.id', '=', 'user_profiles.user_id')
if ($queryUsername)
{
->where('users.username', '=', "$queryUsername")
}
if ($queryPostcode) {
->where('user_profiles.postcode', '=', "$queryPostcode")
}
if ($queryOrderbyPhotos) {
->whereNotNull('user_profile.avatar')
}
if ($queryOrderbyOnline) {
->orderBy('users.last_online', 'DESC')
}
if ($queryOrderbyType) {
->orderBy('users.type', 'DESC')
}
->get();
return view('view', compact('users'));
}
Вот так я подойду к проблеме. Я создам переменную, содержащую конструктор запросов, а затем вызову все дополнительные методы запросов.
С Eloquent и фактически с любым классом, который позволяет Метод цепочки вы можете сделать это:
$query = User::select(...)->join(..);
$query->where(...);
$query->get(...);
Так что в вашем случае я буду пытаться добиться того, что вы хотите, таким образом:
public function index()
{
$input = Request::all();
$query = User::rightJoin('user_profiles', 'users.id', '=', 'user_profiles.user_id');
if (isset($input['u']) && $input['u'])
$query->where('users.username', '=', $input['u']);
if (isset($input['p']) && $input['p'])
$query->where('user_profiles.postcode', '=', $input ['p']);
if (isset($input['o1']) && $input['o1'])
$query->whereNotNull('user_profile.avatar');
if (isset($input['o2']) && $input['o2'])
$query->orderBy('users.last_online', 'DESC');
if (isset($input ['o3']) && $input['o3'])
$query->orderBy('users.type', 'DESC');
$users = $query->get();
return view('view', compact('users'));
}
Конечно, будет хорошей идеей, чтобы у вас была дополнительная проверка правильности ввода для каждого входного параметра. Но это может быть достигнуто разными способами. Вы можете прочитать больше о Проверка контроллера Laravel или же Проверка формы запроса Laravel
Кстати, я предлагаю перенести весь этот код в вашу модель или в отдельный класс, так как я предпочитаю держать контроллеры тонкими.
Ты можешь попробовать :
$users_query = new User;
$users_query->rightJoin(....);
if ($queryUsername)
{
$users_query->where('users.username', '=', "$queryUsername")
}
// Your other conditions .....
....
$users = $users_query->get();