【问题标题】:error: “Creating default object from empty value”错误:“从空值创建默认对象”
【发布时间】:2019-01-15 23:59:58
【问题描述】:

我正在关注一个教程,该教程显示了如何使用 laravel 连接到 MySql,但是在尝试更新值时遇到了错误,我确实尝试找到类似的东西但失败了。 我找到的答案说该对象必须为空,但是如果我要更新现有值,则它不是空的。 我正在关注的一个教程https://www.webslesson.info/2018/01/insert-update-delete-in-mysql-table-laravel-tutorial.html

所以我有一个表单,可以在文件 index.blade.php 中显示数据库中的数据,并带有 edit,该表单可以很好地显示特定用户数据edit.blade.phpStudentController.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');

【问题讨论】:

  • 检查你是否使用var_dump获取了$request中的值
  • 查看edit.blade.php html源码,'$id'应该是$id
  • @kenken9999 编辑了那个,但我仍然收到错误
  • 如果将 $request->get() 更改为 $request->input() 会发生什么,或者您尝试 dd($request->get('name'))
  • @kenken9999i 改为输入,现在它可以工作了,不知道为什么,但谢谢你我猜:D

标签: php mysql laravel


【解决方案1】:

您并未验证是否确实找到了学生。如果没有找到记录,find 会返回 null。

一种常见的做法是使用 findOrFail 并让 Laravel 在找不到带有 $id 的记录时抛出异常。

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

或者你可以自己处理:

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

【讨论】:

  • 是的,现在我可以看到没有找到学生,但我不太明白如何找到。开头的表格仅显示已保存的学生,并且编辑按钮将该学生 ID 传递给编辑方法。我是否错误地传递了 id?
  • 我将 $request->get() 更改为 $request->input() 现在它可以工作了,但是感谢您告诉我我没有验证学生是否存在。我也会使用它。
  • 这与您的错误没有任何关系。您使用 get/input 的方式是可以互换的,它们都会做同样的事情。
  • 好吧,那我猜edit.blade.php HTML源代码的变化,'$id'到$id,解决了我的问题。
  • 是的,这肯定会导致它,因为您的数据库中没有文字 $id 记录。变量不会用单引号解析。
猜你喜欢
  • 2016-10-11
  • 2017-01-22
  • 1970-01-01
  • 2023-03-11
  • 2021-02-22
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多