Laravel 5.0:如何更新数据数组:preg_replace():参数不匹配,pattern是字符串,而替换是数组

时间:2016-04-19 22:32:41

标签: php laravel laravel-5

我是laravel的绝对初学者。 我正在处理错误" preg_replace():参数不匹配,pattern是一个字符串,而当我尝试更新数据数组时,替换是一个数组"

有谁知道解决错误的方法? 如果您需要更多信息,请留下您的意见。

任何建议都将不胜感激。提前谢谢!

LogsController.php

public function update(CreateLogRequest $request, $course_id){

    $count = count($request->input('weeks'));
    $input = $request->all();
    $logs = array();

    for ($i = 0; $i < $count; $i++){
        if($input['weeks'][$i]){
            array_push($logs, array(
                'user_id' => \Auth::user()->id,
                'course_id' => $course_id,
                'weeks' => $i + 1,
                'work_description' => $input['work_description'][$i],
                'instructor_comments' => $input['instructor_comments'][$i],
                'status' => $input['status'][$i],
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now(),
            ));
        }
    }
    $log->update($logs);
    return redirect('/student/home');
}

当我输入代码dd($ logs)时,结果如下。

array:2 [▼
  0 => array:8 [▼
  "user_id" => "1"
  "course_id" => "39"
  "weeks" => 1
  "work_description" => "fadfad"
  "instructor_comments" => "fdasfda"
  "status" => "accepted"
  "created_at" => Carbon {#219 ▶}
  "updated_at" => Carbon {#212 ▶}
]
 1 => array:8 [▼
   "user_id" => "1"
   "course_id" => "39"
   "weeks" => 2
   "work_description" => "fadsfad"
   "instructor_comments" => "fdasfdasfad"
   "status" => "accepted"
   "created_at" => Carbon {#218 ▶}
   "updated_at" => Carbon {#222 ▶}
 ]
]  

Log_edit.blade.php

{!! Form::hidden('course_id', $course->id) !!}
    @foreach($logs as $log)
        <tbody>
        <tr>
            <td>
                {{ $log->weeks }}
                {!! Form::hidden('weeks[]', $log->weeks) !!}
            </td>

            <td> {!! Form::textarea('work_description[]', $log->work_description) !!}  </td>

            <td> {!! Form::textarea('instructor_comments[]', $jlog->instructor_comments) !!} </td>

            <td> {!! Form::select('status[]',
                        array('accepted' => 'accepted',
                              'pending' => 'pending',
                              'declined' => 'declined',
                      ), $log->status) !!}
            </td>
        </tr>
        @endforeach

        </tbody>

2 个答案:

答案 0 :(得分:2)

问题在于:

$log->update($logs);

update方法不采用多维数组。

您的LogsController.php应该是这样的:

public function update(CreateLogRequest $request, $course_id, Log $log){

    $input = $request->all();

    foreach ($input['weeks'] as $i => $log_id){
        $data = [
          'user_id' => \Auth::user()->id,
          'course_id' => $course_id,
          'weeks' => $i + 1,
          'work_description' => $input['work_description'][$i],
          'instructor_comments' => $input['instructor_comments'][$i],
          'status' => $input['status'][$i],
          'created_at' => Carbon::now(),
          'updated_at' => Carbon::now(),
        ];

        $log->where('id', $log_id)->update($data);
    }

    return redirect('/student/home');
}

答案 1 :(得分:0)

经过一些思考和改变,一切都按照我想要的方式运作。非常感谢CharlieJade!

LogsController.php

  @foreach($logs as $log)
        <tbody>
        {!! Form::hidden('id[]', $log->id) !!}
        <tr>
            <td>
                {{ $log->weeks }}
                {!! Form::hidden('weeks[]', $log->weeks) !!}
            </td>

            <td> {!! Form::textarea('work_description[]', $log->work_description) !!}  </td>

            <td> {!! Form::textarea('instructor_comments[]', $log->instructor_comments) !!} </td>

            <td> {!! Form::select('status[]',
                        array('accepted' => 'accepted',
                              'pending' => 'pending',
                              'declined' => 'declined',
                      ), $log->status) !!}
            </td>
        </tr>
        @endforeach
        </tbody>

Logs_edit.blade.php

{{1}}