Laravel:用于更新数据的控制器功能

时间:2017-08-08 07:31:51

标签: php laravel

如何更新foreach的数据?

数据的呈现方式如下:

css-loader

我想使用控制器功能更新数据库中的值。

我知道如何更新单个值,但是对于foreach,我不知道。

昨天我发布了另一个问题,但可能没有正确制定,没有人给我答案。我在这里发布,因为也许你有更多的信息。

非常感谢,非常感谢任何帮助。

Laravel: How to update array in controller

4 个答案:

答案 0 :(得分:2)

您应该创建一个允许接收值数组的函数

在您的视图中,您需要将所有表单元素名称设为数组。

@foreach ($translation as $locale)
<div class="form-group">
    <label><strong>Locale</strong></label>
    <textarea type="text" name="locale[]" rows="1">{{$locale->locale}}</textarea>
</div>
<div class="form-group">
    <label><strong>Title</strong></label>
    <textarea type="text" name="title[]" rows="1">{{$locale->title}}</textarea>
</div>

<div class="form-group">
    <label><strong>Caption</strong></label>
    <textarea type="text" name="caption[]" rows="1">{{$locale->caption}}</textarea>
</div>
<input type="hidden" name="locale_id[]" value="{{$locale->id}}"> // Make sure you add the id
@endforeach

然后在你的控制器上,你应该处理那些数组

function update(){
    $locale_id = $request->locale_id;
    $locale = $request->locale ;
    $caption =  $request->caption;
    $title=  $request->title;
    foreach($locale_id as $key => $value){
         DB::table('project_translations')->where('id', $value )->update([
             'locale' => $locale[$key],
             'title' => $title[$key],
             'caption' => $caption[$key],
         ]);
    }
}

答案 1 :(得分:1)

name属性更改为数组类型,如

<textarea type="text" class="form-control form-control-sm" id="locale" name="locale[]" rows="1" disabled>{{$locale->locale}}</textarea>
.... 
....

为id里面的id添加数组输入字段,如

<input name="id[]" value="{{$locale->id}}" hidden>

现在,在控制器发布功能中,

public function update(Request $request){
    foreach($request->id as $key => $value){

        // Find record to update with Model as your table model

        $record = Model::find($value);

        $record->locale = $request->locale[$key];
        $record->title = $request->title[$key];
        $record->caption = $request->caption[$key];

        $record->save();
    }
}

希望你明白。

答案 2 :(得分:1)

我认为您的 Aws::DynamoDB::Errors::NotFound (): app/controllers/admins/sessions_controller.rb:32:in `login_aws' app/controllers/admins/sessions_controller.rb:6:in `new' foreach包围。

我建议:

  • 将字段的<form>属性更改为ID为当前区域设置的数组:name
  • 在您的控制器中,使用name="locale[{{ $locale->id }}][title]"更新每个区域设置,如下所示:
foreach

答案 3 :(得分:1)

我想你可以试试这个:

@foreach ($translation as $locale)
      <div class="form-group">
          <label><strong>Locale</strong></label>
        <textarea type="text" class="form-control form-control-sm" id="locale" name="locale[]" rows="1" disabled>{{$locale->locale}}</textarea>
       <input type="hidden" name="locale[]" value="{{$locale->locale}}">
      </div>

      <div class="form-group">
        <label><strong>Title</strong></label>
        <textarea type="text" class="form-control form-control-sm" id="title" name="title[]" rows="1">{{$locale->title}}</textarea>
      </div>

      <div class="form-group">
        <label><strong>Caption</strong></label>
        <textarea type="text" class="form-control form-control-sm" id="caption" name="caption[]" rows="1">{{$locale->caption}}</textarea>
      </div>

      <input type="hidden" name="localId[]" value="{{$locale->id}}">
@endforeach



public function update(Request $request){
    foreach($request->localId as $key => $value){
         DB::table('DbName')->where('id', $value )->update([
             'locale' => $request->locale[$key],
             'title' => $request->title[$key],
             'caption' => $request->caption[$key],
         ]);
    }
}

希望这对你有用!!!