在表单选择

时间:2017-08-21 02:24:17

标签: laravel

尝试从表单提交中检索正确的值时遇到问题:: select on form submit。

我传入一个数组(包含full_name和ID)。表单显示正确的信息,但是,当我从表单提交返回值时(例如,如果教练将当前值/播放器更改为新名称),我将返回表单数组ID,而不是我正在尝试的用户名ID要得到。代码

在控制器中:

    $ids = array($p1, $p2, $p3, $p4, $p5, $p6, $p7, $p8, $p9, $p10, $p11, $p12, $p13, $p14, $p15, $p16);
    $ids_ordered = implode(',', $ids);

    $player= DB::table('players')
        ->whereIn('id', $ids)
        ->selectRaw('id, CONCAT(fname," ",lname) as full_name')
        ->orderByRaw(DB::raw("FIELD(id, $ids_ordered)"))
        //->pluck('id' ,'full_name') //Only returning  ONE value - not both?
        ->get()
        ->mapWithKeys(function($i) {
          return [$i->id => $i->full_name.' ('.$i->id.')'];
        });

    $player=collect([$player])->flatten();

注意:我需要以正确的顺序获得16 x ID,因为它是运动队选择表格。这部分正在运作。我也试过使用Pluck,但是对于一些reaon只能返回一个值(例如full_name或ID) - 而不是两者。所以我改为mapWithKeys。

在表单/视图中:

    <div class="form-group">
        {!! Form::label('capt','Team Captain for Matchcard') !!}
        {!! Form::select('capt', $played, null, ['placeholder' => $played[0] ,'class' => 'form-control']) !!}

    </div>

表格中有16个字段,如上所述。占位符是当前值(当前选定的团队成员)。教练可以从下拉菜单($ playing array)中进行更改。

表单完美显示。所以发生了什么,让我们说教练更改上面的捕获字段(当前玩家ID为17但$ play数组值为0)。如果我们从下拉列表中更改/选择一个新玩家(例如id 25,可能是下拉列表中的第四个名字 - 因此数组值[3]) - 我的提交返回(回到控制器中)显示3并且我想要25 (玩家表中所需名称/玩家的实际玩家ID)。

感谢有人可以帮助我在这个场景中获得新ID ...非常感谢并提前感谢。

PS:我正在使用Laravel 5.4

数组显示:

enter image description here

使用上面的示例,如果我将表单中的capt字段更改为Corry Allsop(id 12),则表单返回2(数组中的第3个名称)

1 个答案:

答案 0 :(得分:0)

使用pluck

从数据库中获取$played的正确方法
$player= DB::table('players')
        ->whereIn('id', $ids)
        ->selectRaw('id, CONCAT(fname," ",lname) as full_name')
        ->orderByRaw(DB::raw("FIELD(id, $ids_ordered)"))
        ->pluck('full_name' ,'id')

pluck第二个参数是数组键,第一个是值

//view
{{ Form::select('capt', $played, null) }}

编辑:

删除此行$player=collect([$player])->flatten();。 展平方法将多维集合展平为单个维度。这就是为什么id作为键被数组键替换(从0开始)

编辑2:

显示当前播放器

//controller
return view('grades.matchcard.edit', ['ids' => $ids, played' => $player, 'matchcards' => $data, 'rounds' => $data1, 'mid' => $mcid, 'gstat' => $gstat, 'Rplayers' => $Rplayers]);

//view
{{ Form::select('capt', $played, $ids[0], ['class' => 'form-control']) }}

{{ Form::select('capt', $played, $ids[1], ['class' => 'form-control']) }}