我是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>
答案 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}}