使用数据库

时间:2018-04-24 12:48:59

标签: forms laravel

我有一个包含三个字段的搜索表单:部门,角色和位置,我打电话给联系人搜索,它将在多个页面上。

这是一张图片:

enter image description here

在这个程度上,我把它作为Blade包含,所以我可以在任何需要的地方重复使用它。

我可以在Users表中使用这些字段的所有值,因为我可以执行以下操作:

SELECT DISTINCT department, role, location FROM users

这将为我提供所有独特的角色,部门和地点。

但是,为了通过数据库填充此表单,我每次都必须将数据传递给父视图吗?

例如,我在想这样的事情。

在控制器中

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

在视图中

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

唯一的问题是,我必须将此数据发送到使用该表单的每个视图吗?

或者,我只是制作一个使用User模型的SearchController来输入它吗?

是否可以通过这种方式将数据提供给部分视图?

更新

查看作曲家似乎是要走的路,但我觉得这不合适:

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 :(得分:0)

正如我在评论中提到的,你可以这样做:

在视图中

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

另一种方法是创建一组使用局部视图的所有视图。将中间件应用于您将数据分配给请求的组或使用View::share()

将数据共享到视图

答案 1 :(得分:0)

View composers非常适合这一点。

您为表单创建了一个单独的视图,例如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视图时,都会执行此查询并将结果传递给视图。