错误:“从空值创建默认对象”

时间:2018-08-08 16:23:40

标签: php mysql laravel

我正在跟踪一个教程,该教程显示了如何使用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');

1 个答案:

答案 0 :(得分:3)

您并没有验证是否确实找到了一名学生。如果未找到任何记录,则find将返回null。

一种常见的做法是使用findOrFail,如果找不到带有$ id的记录,则让Laravel抛出异常。

$student = Student::findOrFail($id);

或者您可以自己处理:

$student = Student::find($id);
if (!$student) {
    return response(['error' => 'No student found']);
}