尝试从表单提交中检索正确的值时遇到问题:: 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
数组显示:
使用上面的示例,如果我将表单中的capt字段更改为Corry Allsop(id 12),则表单返回2(数组中的第3个名称)
答案 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']) }}