【发布时间】:2018-01-29 00:36:06
【问题描述】:
只是在提交表单时尝试从 form::select 中检索正确的值时遇到问题。
我传入一个数组(其中包含全名和 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 个 ID,因为它是运动队选择表。这部分正在工作。我也尝试过使用 Pluck,但对于某些原因,只能返回一个值(例如 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 个字段。占位符是当前值(当前选择的团队成员)。教练可以从下拉列表中更改($played 数组)。
表格显示完美。那么发生了什么,假设教练更改了上面的 capt 字段(当前玩家 id 为 17,但 $played 数组值为 0)。如果我们从下拉列表中更改/选择一个新玩家(例如 id 25,它可能是下拉列表中的第四个名称 - 因此数组值 [3] ) - 我的提交返回(返回控制器)显示 3 我想要 25 (玩家表中所需名称/玩家的实际玩家 ID)。
如果有人可以在这种情况下帮助我获得新 ID,不胜感激……非常感谢并提前感谢。
PS:我使用的是 Laravel 5.4
数组显示:
使用上面的示例,如果我将表单选择中的 capt 字段更改为 Corry Allsop (id 12),则表单将返回 2(数组中的第三个名称)
【问题讨论】:
-
使用 pluck 会产生一个以 id 为索引、full_name 为值的数组。所以你可能想使用索引来获取 id 的值
-
谢谢扎姆。我使用 pluck 的问题,如果我返回 $player(在调用视图之前) - 我只能显示一个值,而不是两者。我可能有不正确的 pluck 语法 - 但只能获得 full_name 或 id - 不能同时在原始数组中。我在上面使用的 alt 方法返回了正确的数组 inc,包括 full_name 和 id - 只是我无法在提交时从表单中取回新选择的玩家 ID - 相反,我取回了 NEW ARRAY 订单 ID。
标签: laravel