【问题标题】:Returning correct value from array in Form Select从表单选择中的数组返回正确的值
【发布时间】: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


【解决方案1】:

使用 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])-&gt;flatten();。 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']) }}

【讨论】:

  • 谢谢 bhill... 类似于我上面对 Zam 的注释 - 我需要从提交中取回 ID,而不是数组中的顺序。如果我在下拉列表中选择第四个名称,即数组顺序中的 3,当我 $x = $request->capt;我返回 3 而不是该名称的 ID(来自原始数组),出于参数考虑,该 ID 应该是 25。 PS:使用 pluck 方法,如果我在查询后返回 $player,我应该看到 ID 以及姓名?因为我只在我的实例中看到全名。再次感谢。
  • 对不起,我误读了。你是怎么得到$played的?关于您的问题,您只需提供如何获取$player
  • return view('grades.matchcard.edit', ['played' => $player, 'matchcards' => $data, 'rounds' => $data1, 'mid' => $ mcid, 'gstat' => $gstat, 'Rplayers' => $Rplayers]);
  • 仍然使用pluck方法并删除此行$player=collect([$player])-&gt;flatten();数据结果是什么?
  • 它返回 ID -> {"17":"Steven Graham","1":"David Rattcliffe"... 你的明星!!由于占位符($player[0] ..),我得到一个未定义的 0 错误我现在如何显示第一条记录(旧的 $player[0])..?请注意,如果我临时删除占位符 - 它会返回正确的 ID :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多