Функция фильтра в Laravel - PullRequest
       1

Функция фильтра в Laravel

0 голосов
/ 24 сентября 2018

Здравствуйте, я создаю систему фильтров, поэтому у меня есть поле выбора, где я могу выбрать свои параметры, а затем нажать кнопку и перейти на другую страницу, где я могу увидеть все свои результаты.

здесь частьмой контроллер

public function getValues(Request $request){
            $typ=$request->get('typ');
            $stellentyp=$request->get('stellentyp');
            $bereich=$request->get('bereich');
            $abschluss=$request->get('abschluss');
            $view = 'user.'.$stellentyp;
            $row = DB::table('angebots')
            ->where('stellentyp', $stellentyp)
            ->count();
        $fwds = DB::table('angebots')
            ->where('stellentyp', 'Freiwilligendienst')
            ->where('typ', $typ)
            ->where('bereich', $bereich)
            ->where('abschluss', $abschluss)
            ->orderBy('stellenname', 'asc')
            ->get();
         $jobs = DB::table('angebots')
            ->where('stellentyp', 'Job')
            ->where('typ', $typ)
            ->where('abschluss', $abschluss)
            ->where('bereich', $bereich)
            ->orderBy('stellenname', 'asc')
            ->get();

но у меня сейчас проблема, я хочу, чтобы, если мое поле пустое, оно не фильтровало

, вот так

 if(empty($request->get('typ'))){}
 else{->where('typ', $typ)}

, но это не такработать, я не знаю, как я могу собрать свои записи в базе данных с if / else?Кто-нибудь знает, как это может работать?

спасибо!

Я изменил свою функцию, как это, но я получаю ошибку

public function getValues(Request $request){
        $typ=$request->get('typ');
        $stellentyp=$request->get('stellentyp');
        $bereich=$request->get('bereich');
        $abschluss=$request->get('abschluss');
        $user = DB::table('users')->get();
        $angebots = DB::table('angebots') ->orderBy('stellenname', 'asc');
        if(!empty($request->get('stellentyp'))){
            $angebots->where('stellentyp', $stellentyp);
        }
        $angebots->get();
        $row = $angebots->count();
        return view('user/angebots', compact('typ', 'stellentyp', 'bereich', 'abschluss', 'row', 'angebots', 'user'));
    }

, если я поставлю get после этоговот так

$angebots = DB::table('angebots') ->orderBy('stellenname', 'asc')->get();

У меня нет ошибки, но если я поставлю ее после, если он покажет мне эту ошибку:

Неопределенное свойство: Illuminate \ Database \ MySqlConnection :: $ firma (View: C: \ wamp \ sites \ j4ylara \ resources \ views \ user \ angebots.blade.php)

это мое мнение:

{{$row}} Angebote insgesamt
        <div class="row">
            @foreach ($angebots as $angebot)
                <div class="col-12 col-md-6 col-lg-4 pt-4">
                    <div class="card offer-card">
                        <div class="card-image">
                            <img class="img-fluid" src="{{ asset('uploads/avatars/' . $user[$angebot->firma -1]->avatar) }}">
                        </div>
                        <div class="card-body">
                            <h4 class="text-j4y-dark praktikumstitel">{{ $angebot->stellenname }}</h4>
                            <a href="{{ route('angebot.details',['id'=>$angebot->firma]) }}">Jetzt mehr anzeigen »</a>
                        </div>
                    </div>
                </div>
            @endforeach
        </div>

, если я закомментирую переменную $ angebotвсе работает

, поэтому у меня есть переменная $ row, и она показывает мне, сколько результатов я получаю, и если я отфильтрую, она показывает правильное количество результатов

, но как я могу отобразить свои результаты сейчас?если foreach не работает ???

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы рядом.Вам нужно подождать с ->get() до тех пор, пока ifs.Это так, потому что как только вы выполните get(), запрос будет выполнен, и вы больше не сможете добавлять фильтры.

$fwds = DB::table('angebots')
->where('stellentyp', $stellentyp)
->orderBy('stellenname', 'asc'); //The get is not needed yet 

if ($this->typ) {
    $fwds->where('typ', 'like', "%{$this->typ}%");
}

if ($this->bereich) {
    $fwds->where('bereich', 'like', "%{$this->bereich}%");
}

if ($this->abschluss) {
    $fwds->where('abschluss', 'like', "%{$this->abschluss}%");
}

$fwds = $fwds->get(); //Place it after the ifs
0 голосов
/ 24 сентября 2018

Я использую формы фильтра, подобные этой

class UserFilterForm extends UserRepository
{
    protected $fillable = [
        'id',
        'name',
        'email',
    ];

    public static function rules() :array
    {
        return [
            'id'        => 'nullable|integer|exists:users,id',
            'name'      => 'nullable|string',
            'email'     => 'nullable|email',
        ];
    }

    public function filter()
    {
        $qb = self::query()->with('roles');

        if ($this->id) {
            $qb->where('id', $this->id);
        }

        if ($this->name) {
            $qb->where('name', 'like', "%{$this->name}%");
        }

        if ($this->email) {
            $qb->where('email', 'like', "%{$this->email}%");
        }

        return $qb->paginate(10);
    }
}

И что я делаю в контроллере:

class UserController {
    public function index(Request $request)
    {
        $form = new UserFilterForm;

        $form->fill($request->all());

        $this->validate($request->all(), $form::rules());

        return view('users', compact($form->filter()));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...