php 如何在Laravel中使用Form::Select只显示输入数组中的特定数据?[duplicate]

x759pob2  于 2022-11-21  发布在  PHP
关注(0)|答案(3)|浏览(145)

此问题在此处已有答案

Laravel put array into selectbox(4个答案)
5小时前关门了。
我有这个数组(我用函数dd()显示它),有多个数据,我想在输入字段中只显示“name”数据。

这就是现在的样子

以及我希望被显示的姓名。

这是我在Controller中的函数,我把数据推到页面上。

private function needs()
    {
        $grades = Grade::all()->pluck('name', 'id')->toArray();

        $subjects = Subject::all()->pluck('name', 'id')->toArray();

        $students = User::students()->get()->pluck('name', 'id')->toArray();

        $teachers = User::teachers()->get()->pluck('name', 'id')->toArray();

        $goals = Goal::all()->pluck('name', 'id')->toArray();

        $statuses = Status::all()->pluck('name', 'id')->toArray();

        $formats = Format::all()->map->only(['id', 'name', 'students'])->values()->toArray();

        return compact('grades', 'subjects', 'students', 'teachers', 'goals', 'statuses', 'formats');
    }

又有表格跃然纸上:

<div class="form-group">
                {{ Form::label('format_id', 'Формат', ['class' => 'col-sm-3 control-label no-padding-right']) }}
                <div class="col-sm-8">
                    {{ Form::select('format_id', [null => '--не выбран--'] + $formats, $data->format_id ?? 0, ['class' => 'form-control', 'id' => 'format_id']) }}
                </div>
            </div>
uurity8g

uurity8g1#

您可以在控制器的$format变量下使用一个小循环来处理这个问题:

$arr = [];
foreach ($formats as $item) {
    array_push($arr, $item['name']);
}
$formats = $arr;

或者将此行更改为:

$formats = array_column(
    Format::all()->map->only(['id', 'name', 'students'])->values()->toArray(),
    'name'
);
f87krz0w

f87krz0w2#

你需要转换你的$formats数组,使其具有键“id”和值“name”:

{{ Form::select(
    'format_id',
    [null => '--не выбран--'] + array_combine(array_column($formats, 'id'), array_column($formats, 'name')),
    $data->format_id ?? 0,
    ['class' => 'form-control', 'id' => 'format_id']
) }}
doinxwow

doinxwow3#

你可以使用mapWithKeys()集合函数来做到这一点。
以将数组格式化为[id =〉name]为例:

$grades = Grade::all()->pluck('name', 'id')
            ->mapWithKeys(function ($grade) {
                return [$grade->id => $grade->name];
            })
            ->toArray();

// Or select instead of pluck
$grades = Grade::select('id', 'name')->get()
            ->mapWithKeys(function ($grade) {
                return [$grade->id => $grade->name];
            })
            ->toArray();

文件:https://laravel.com/docs/9.x/collections#method-mapwithkeys

相关问题