Как фильтровать данные в laravel mysql? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь закодировать окно поиска, которое будет искать по столбцу в моей базе данных. Если поиск соответствует столбцу, то эта запись будет напечатана в таблице ниже.

Я ищу в столбце, который содержит округ записи компании. Однако при поиске категории, даты и возраста не отображаются ошибки, то есть в базе данных таблица остается пустой. Я не вижу, что я сделал неправильно в теории, я думаю, что код должен работать! Мы будем благодарны за любую помощь.

result.blade. php

<div class="container mt-5 mb-5">
    <h2>{{ __('message.menu.tournament_results') }}</h2>
    <form action="{{ route('filter') }}" method="post" class="mt-5 mb-5">
        @csrf
        <div class="row">
            <div class="form-group col-md-3">
                <label for="category">category</label>
                <select id="category" name="category" class="form-control">
                    @foreach(\App\Category::whereParent_id(62)->get() as $category)
                        <option value="{{ $category->id }}">{{ $category->name}}</option>
                    @endforeach
                </select>
            </div>
            <div class="form-group col-md-3">
                <label for="age">age</label>
                <select id="age" name="age" class="form-control">
                    @foreach(\App\Age::all() as $age)
                        <option value="{{ $age->id }}">{{ $age->title_fa}}</option>
                    @endforeach
                </select>
            </div>
            <div class="form-group col-md-3">
                <label for="date">date</label>
                <input type="text" id="date" name="date" class="form-control" />
                <span id="spanDate"></span>
            </div>
            <div class="form-group col-md-3 mt-4">
                <button class="btn btn-success btn-block">submit</button>
            </div>
        </div>
    </form>
    @if ($results)
        <div class="table-responsivemt-5 mb-5">
            <table class="table">
                <thead>
                <tr>
                    <th>{{ __('message.ages.id') }}</th>
                    <th>{{ __('message.ages.first_last_name') }}</th>
                    <th>{{ __('message.ages.province') }}</th>
                    <th>{{ __('message.ages.style') }}</th>
                    <th>{{ __('message.ages.age') }}</th>
                    <th>{{ __('message.ages.weight') }}</th>
                    <th>{{ __('message.ages.position') }}</th>
                </tr>
                </thead>
                <tbody>
                @foreach($results as $result)
                    <tr>
                        <td>{{ $result->id }}</td>
                        <td>{{ $result->first_last_name }}</td>
                        <td>{{ $result->province->province_name }}</td>
                        <td>{{ $result->style }}</td>
                        <td>{{ $result->age }}</td>
                        <td>{{ $result->weight }}</td>
                        <td>{{ $result->role }}</td>
                    </tr>
                @endforeach
                </tbody>
            </table>
        </div>
    @endif
</div>

web. php

Route::get('/result', 'ResultController@index')->name('result.index');
Route::post('/result/store', 'ResultController@filter')->name('filter');

ResultController. php

public function filter()
{
    $results = Result::filter()->paginate(12);
    return view('Home.result', compact('results'));
}

Результат. php

public function scopeFilter($query)
{
    $category = request('category');
    if( isset($category) && trim($category) != '' && $category != 'all') {
        $query->whereHas('categories' , function ($query) use ($category) {
            $query->whereId($category);
        });
    }

    $age = request('age');
    if(isset($age) && trim($age) != '') {
        if($age) {
            $query->whereAge($age);
        }
    }

    $date = request('date');
    if(request('date')) {
        $query->oldest();
    } else {
        $query->latest();
    }

    return $query;
}
...