@Analka

Laravel фильтр по нескольким параметрам?

подскажите как реализовать фильтр пользователей по 10 параметрам?

пробую так

$gender = 0;
if (Auth::user()->attributes->gender == 1){
    $gender = 2; //Выводим деушек , если текущий пользователь парень
}
if (Auth::user()->attributes->gender == 2){
    $gender = 1; //Выводим парней , если текущий пользователь девушка
}

$users = User::filter($request->all(),$gender)
        ->orderBy('users.id','asc')->get();

но не работает ничего

public function scopeFilter($query,$request,$gender)
    {
        $query->leftJoin('user_attributes','user_attributes.user_id',
             '=','users.id');

        $query->select('users.id','users.slug','users.name',
            'user_attributes.fullname','user_attributes.age',
            'user_attributes.avatar',
            'user_attributes.city');
        $query->where('user_attributes.gender','=', $gender);
        return $query;
}
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Kostik_1993
Fullstack Web Developer | PHP | Laravel | Vue.js
Ну для начала я бы советовал вам глянуть какой запрос у вас получается по итогу. Если вернулась ошибка то можно ее и сюда сбросить
Ответ написан
@karminski
Разработчик CRM/ERP систем
$gender = 0; 
if (Auth::user()->attributes->gender == 1){
    $gender = 2; 
}
else if (Auth::user()->attributes->gender == 2) { // Тут у вас ошибка
    $gender = 1;
}
Ответ написан
@jazzus
У юзера гендер заполнен? dd($gender) что отдает? Зачем request в скопе? Или это обрезанный код? Для дебага здесь нужно точный постить. Почему не через отношения сделано? Я бы все указанные поля из атрибутов в users запихал и можно вообще без таблицы атрибутов
User::where('gender', $gender)
Ну или whereHas юзать если через отношения, но гендер точно нужно не в атрибутах хранить. FullName можно в модели собрать
public function getFullNameAttribute()
{
    return $this->name.' '.$this->lastname;
}

и получать через
$user->FullName
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы