Показывать в таблице результаты поиска, когда пользователь нажимает кнопку «Поиск»

У меня есть 2 метода в ParticipantController. Индекс () показывает некоторую информацию обо всех регистрациях на конференции. Затем search () предназначен для формы поиска в представлении, чтобы отображать только в таблице результаты, в которых пользователь, выполнивший регистрацию, имеет имя, подобное имени, введенному пользователем в форме поиска:

class ParticipantController extends Controller
{
    public function index($id){
        $conference = Conference::find($id);
        $conference->load('registrations.participants.answers.question');

        return view('participants.index')->with('conference',  $conference);
    }

    public function search($id, Request $request)
    {
        $name = $request->get('participant');
        $conference = Conference::findOrFail($id);

        $searchInfo = $conference->load([
            'registrations.participants' => function ($query) use ($name) {
                return $query->where('name', 'like', '%' . $name . '%');
            },
            'registrations.participants.answers.question'
        ]);

        return view('participants.index', compact('conference'));
    }
}

Маршруты, которые у меня есть для этих методов:

  Route::get('conference/edit/{id}/participants',    [ 'uses' => 'ParticipantController@index', 'as'    =>    'participants.index']);

 Route::get('conference/edit/{id}/participants/search', [
    'uses' => 'ParticipantController@search',
    'as'   => 'participants.search'
]);

Я сомневаюсь, как отобразить результаты поиска в представлении после того, как пользователь введет некоторые данные в форму поиска и нажмет «Поиск». Когда пользователь получает доступ к файлам members / index.blade.php, все регистрации уже перечислены в таблице с foreach ниже с использованием кода в методе index ():

@foreach($conference->registrations as $registration)
    <tr>
        <td>{{$registration->customer->name}} {{$registration->customer->surname}}</td>
        <td>{{ $registration->status === 'C' ? 'Complete' : 'Incomplete' }}</td>
        <td><a data-regid = "{{$registration->id}}"> More details</a></td>
    </tr>
@endforeach

И все работает нормально, таблица показывает детали всех регистраций, например:

User that did the registration       Quantity           Status                Details

  Jake K                               2                Complete            Show
    ...

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

HTML формы поиска в представлении:

<form  action = "{{ route('participants.search', ['id' => $conference->id] )}}" method = "get">
    <div class = "form-row">
        <div class = "form-group col col-md-6">
            <label for = "participant">Search</label>
            <div class = "input-group">
                <input type='text' name = "participant" class = "form-control" placeholder = "Name" />
            </div>
        </div>
    </div>
</form>

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

sree 22.06.2018 12:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
124
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать таблицы данных Ссылка: https://github.com/yajra/laravel-datatables

Проверять . это решит вашу проблему.

Спасибо, вы знаете, где находится HTML-код для панели поиска и результатов на странице?

user9977616 22.06.2018 13:07

Проверьте файлы js. Поле поиска и результаты на странице, созданные в файлах javascript.

Harjinder Singh 22.06.2018 13:14

Это поможет вам с тем, что вам нужно - https://datatables.net/examples/styling/bootstrap

Спасибо, вы знаете, где находится HTML-код для панели поиска и результатов на странице?

user9977616 22.06.2018 13:06

Это добавлено самой библиотекой, вам просто нужно инициализировать datatable в вашей таблице содержимого, как показано - $ ('# your_table_id'). DataTable ();

DIGVJSS 22.06.2018 14:05
Ответ принят как подходящий

Измените действие поиска, как это

public function search($id, Request $request)
{
    $name = $request->get('participant');
    $conference = Conference::with(['registrations.participants' => function() ($query) use ($name){
                       return $query->where('name', 'like', '%' . $name . '%');
                  },'registrations.participants.answers.question'])->findOrFail($id);

    return view('participants.index', compact('conference'));
}

Теперь, если вы внимательно посмотрите, и индекс, и поиск имеют один и тот же тип возврата conference, разница только в том, что в поиске мы отфильтровали участников.

ИЛИ ЖЕ

вы также можете просто добавить функцию поиска в действие индекс

public function index($id, Request $request){
   $name = $request->get('participant');

   if ($name){
       $conference = Conference::with(['registrations.participants' => function() ($query) use ($name){
                       return $query->where('name', 'like', '%' . $name . '%');
                  },'registrations.participants.answers.question'])->findOrFail($id);
   }else{
       $conference = Conference::with('registrations.participants.answers.question')->findOrFail($id);
   }

   return view('participants.index')->with('conference',  $conference);
}

Спасибо, а как показать отфильтрованных участников в представлении? Обязательно ли иметь один и тот же foreach дважды? А также результаты отфильтрованных участников должны появляться только при нажатии кнопки «Поиск».

user9977616 22.06.2018 14:25

когда вы нажимаете кнопку отправки, он отображает тот же вид, но с отфильтрованным результатом

rkj 22.06.2018 14:33

Другие вопросы по теме