Форма поиска Laravel с использованием базы данных - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть поисковая форма с тремя полями: Отдел, Роль и Местоположение, которому я звоню Поиск контактов, и она должна быть на нескольких страницах.

Вот изображение:

enter image description here

В этом смысле я включил его в Blade-модуль, чтобы я мог просто повторно использовать его там, где он мне нужен.

Все значения для нихполя доступны в таблице «Пользователи», так как я могу сделать следующее:

SELECT DISTINCT department, role, location FROM users

Это даст мне все уникальные роли, отделы и местоположения.

Однако для заполнения этой формы через базу данных мне придется каждый раз передавать данные в родительское представление?

Например, я думал что-то вроде этого.

В контроллере

$formFields = User::distinct()->get(['department', 'role', 'location']);

В поле зрения

@foreach(formFields as $field)
    $field->department
    ...
    ...
@endforeach

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

В качестве альтернативы, я могу просто сделать SearchController, который использует модель пользователя to подавать в него?

Можно ли таким образом подать данные в частичное представление?

Обновление

Представление композиторов, кажется, является подходящим способом, однакоЯ не чувствую, что это действительно:

view()->composer('layouts.quick-search', function($view) {
            $view->with('departments', \App\User::distinct()->get(['department']),
                        'locations', \App\User::distinct()->get(['location']),
                        'roles', \App\User::distinct()->get(['role']));
        });

Поскольку это не похоже на несколько переменных.

Я также попробовал следующее:

<select class="form-control transparant" id="department" name="department">
    @foreach($departments as $department)

        <option value="{{ $department }}">{{ $department }}</option>

    @endforeach

</select>

Но это заполнило поле выбора:

{"department":"Digital","profile":null}

Это явно массив, но означает ли это, что мне придется JSON-декодировать это?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Представление композиторов идеально подходит для этого.

Вы создаете отдельное представление для формы, что-то вроде search и помещаете это в поставщика услуг:

use Illuminate\Support\Facades\View;
use App\User;
// ...
publlic function boot()
{
    View::composer('search', function ($view) {
        $view->with([
            'formFields' => User::distinct()->get(['department', 'role', 'location']);
        ]);
    });
}

Теперь каждый раз, когда будет использоваться представление search, этот запрос будет выполняться и результаты будут передаваться в представление.

0 голосов
/ 24 апреля 2018

Как я уже упоминал в своем комментарии, вы можете сделать что-то вроде этого:

В поле зрения

@php $formFields = \App\User::distinct()->get(['department', 'role', 'location']); @endphp
@foreach(formFields as $field)
    $field->department
    ...
    ...
@endforeach

Другим способом сделать это было бы создание группы всех тех представлений, которые используют частичное представление. Примените промежуточное программное обеспечение к той группе, в которой вы назначаете данные для запроса или делитесь данными для представлений, используя View::share()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...