我正在跟踪一个教程,该教程显示了如何使用laravel连接到MySql,但是在尝试更新值时遇到了错误,但我确实尝试找到类似的方法但失败了。 我发现的答案说该对象必须为空,但是如果我要更新现有值,那么它就不会为空。 我正在关注https://www.webslesson.info/2018/01/insert-update-delete-in-mysql-table-laravel-tutorial.html
的教程因此,我有一个表单,可以通过 edit 在文件 index.blade.php 中显示数据库中的数据,该表单可以很好地显示特定的用户数据。 edit.blade.php 和 StudentController.php 文件中的方法。
它们看起来像这样:
用户数据表和编辑按钮 index.blade.php
<table class="table table-bordered">
<tr>
<th>First name</th>
<th>Last name</th>
<th>Edit</th>
<th>Delete</th>
</tr>
@foreach($students as $row)
<tr>
<th>{{$row['name']}}</th>
<th>{{$row['surname']}}</th>
<th><a href="{{action('StudentController@edit', $row['id'])}}" class="btn btn-primary">Edit</a></th>
<th></th>
</tr>
@endforeach
</table>
edit.blade.php 文件中的表格
<form action="{{action('StudentController@update','$id')}}" method="post">
{{csrf_field()}}
<input type="hidden" name="_method" value="PATCH">
<div class="form-group">
<input type="text" name="name" class="form-control" value="{{$student->name}}" placeholder="Enter first name">
</div>
<div class="form-group">
<input type="text" name="surname" class="form-control" value="{{$student->surname}}" placeholder="Enter last surname">
</div>
<div>
<input type="submit" class="btn btn-primary" value="Edit">
</div>
</form>
Student.Controller.php 文件中的方法
public function update(Request $request, $id)
{
$this->validate($request, [
'name'=> 'required',
'surname'=> 'required'
]);
$student = Student::find($id);
$student->name=$request->get('name');
$student->surname=$request->get('surname');
$student->save();
return redirect()->route('students.index')->with('success', 'Data Updated');
}
我在以下行的 StudentController.php 文件中收到错误:$ student-> name = $ request-> get('name');
答案 0 :(得分:3)
您并没有验证是否确实找到了一名学生。如果未找到任何记录,则find将返回null。
一种常见的做法是使用findOrFail,如果找不到带有$ id的记录,则让Laravel抛出异常。
$student = Student::findOrFail($id);
或者您可以自己处理:
$student = Student::find($id);
if (!$student) {
return response(['error' => 'No student found']);
}