【问题标题】:Select Option value does not get stored in database选择选项值未存储在数据库中
【发布时间】:2018-04-22 22:53:34
【问题描述】:

Laravel 查看代码:

<tbody>
  @foreach($drycleaning as $drycleaning)
      <tr>
        <td class=""><input type="text" size="5" name="dc_{{$drycleaning->id}}"></td>
        <td class="">
            <div><div class="form-group">
            <select id="projectinput5" name="p_dc_{{$drycleaning->id}}" class="form-control">
            <option value="" selected>Price of</option>
            <option name="p_dc_{{$drycleaning->id}}" value="{{$prices->shirt}}">shirt</option>
            <option name="p_dc_{{$drycleaning->id}}" value="{{$prices->pant}}">pant</option>
            <option name="p_dc_{{$drycleaning->id}}" value="{{$prices->top}}">top</option>
            </select>
            </div></div>
        </td>
      </tr>
@endforeach
</tbody>

控制器代码:

public function store(Request $request)
{

  $bill = Bill::create([
  'waf_1' => $request->waf_1,
  'dc_1' => $request->dc_1,
  'dc_2' => $request->dc_2,
  'dc_3' => $request->dc_3,
  ...
  'p_dc_1' => $request->p_dc_1,
  'p_dc_2' => $request->p_dc_2,
  'p_dc_3' => $request->p_dc_3,
  ...
  ]);

  $bill->save();
  return redirect()->route('sp.orders.index');
}

由于foreach in view,输入和下拉选择显示3次。并且只有 3 个输入的输入值成功保存到数据库中,而不是选定的选项值。 谁能帮我理解我的代码错误?

【问题讨论】:

  • 旁注:
  • 您确定 id 匹配 (1,2,3)?
  • 是的。我很确定 id 匹配。不仅 1,2,3 我在视图、控制器和数据库中创建并编写了所有 50 个。
  • 您是否已将列添加到fillable 属性

标签: php laravel select laravel-5 input


【解决方案1】:

这里有适合你的解决方案

在你的刀片中

<tbody>
    @foreach($drycleaning as $drycleaning)
        <tr>
            <td class=""><input type="text" size="5" name="dc[{{ $drycleaning->id }}]"></td>
            <td class="">
                <div><div class="form-group">
                    <select id="projectinput5" name="p_dc[{{ $drycleaning->id }}]" class="form-control">
                        <option value="" selected>Price of</option>
                        <option value="{{ $prices->shirt }}">shirt</option>
                        <option value="{{ $prices->pant }}">pant</option>
                        <option value="{{ $prices->top }}">top</option>
                    </select>
                </div></div>
            </td>
        </tr>
    @endforeach
</tbody>

在你的控制器中

public function store(Request $request)
{
    $data = array();
    $data['waf_1'] = $request->waf_1;

    foreach ($request->dc as $key => $value)
        $data['dc_'.$key] = $value;

    foreach ($request->p_dc as $key => $value)
        $data['p_dc_'.$key] = $value;

    $bill = Bill::create($data);
    return redirect()->route('sp.orders.index');
}

【讨论】:

  • i 值并不总是按顺序排列。 $drycleaning->id 可以是随机的。
  • 查看我的新答案。这将适用于非序列。但我建议你在这种情况下使用一对多数据库领域。
  • 我已经尝试过这种语法。在 dd($request->all());输出它给出两个数组 "dc" => array:3 [▼ 4 => "5" 5 => "7" 6 => "9" ] "p_dc" => array:3 [▼ 4 => "8 " 5 => "7" 6 => "43" ] 但只有 "dc" 数组被保存。这就是我正在努力解决的问题。感谢您迄今为止所做的努力。
  • 谢谢。事实证明,模型文件中没有提到可以填写的字段很少。
【解决方案2】:

我会将名称属性设为数组,因为这样您就可以拥有任意数量的属性,并且您的 id 并不总是相同。希望这能让你继续前进:

@foreach($drycleaning as $drycleaning)
  <tr>
    <td class=""><input type="text" size="5" name="dc[]"></td>
    <td class="">
        <div><div class="form-group">
        <select id="projectinput5" name="p_dc[]" class="form-control">
        <option value="" selected>Price of</option>
        <option value="{{$prices->shirt}}">shirt</option>
        <option value="{{$prices->pant}}">pant</option>
        <option value="{{$prices->top}}">top</option>
        </select>
        </div></div>
    </td>
  </tr>

@endforeach

然后你可以在你的控制器中迭代

【讨论】:

  • {{$drycleaning-&gt;id}} 应该已经这样做了吗?
  • 你 100% 正确,我没有正确编辑原始的 sn-p!
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多