laravel-5.4 - 错误:从空值创建默认对象

Posted

技术标签:

【中文标题】laravel-5.4 - 错误:从空值创建默认对象【英文标题】:laravel-5.4 - error :Creating default object from empty value 【发布时间】:2017-09-15 06:30:53 【问题描述】:

我想将图像路径存储在数据库中。我在vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php 下的控制器代码如下:

public function register(Request $request)

    $this->validator($request->all())->validate();

    if($request->hasFile('image')) 
    $image_name = $request->file('image')->getClientOriginalName();              
    $image_path = $request->file('image')->store('public'); 
    $user->image = Storage::url($image_name);
    $user->save();
    

    event(new Registered($user = $this->create($request->all())));

   // $this->guard()->login($user); disable autologin for new users

    return $this->registered($request, $user)
                    ?: redirect($this->redirectPath());

我收到以下错误:RegistersUsers.php 第 40 行中的 ErrorException:从空值 创建默认对象。

图像保存在公用文件夹中,但无法将图像路径保存在用户表数据库中。用户表架构Schema::create('users', function (Blueprint $table) $table->increments('user_id'); $table->string('name'); $table->string('image'); $table->rememberToken(); $table->timestamps();

如何继续将图像路径存储在数据库中的用户表中

【问题讨论】:

如何实现create 方法? 【参考方案1】:

使用下面的简单方法:

$user = User::where('id', '=', $id)->first(); // where id is method param from url or request object
$user->save();

这在更新多个表时也更容易,其中子表中的 id 具有外键并且需要在更新过程中显式定义。

$user = User::find($id); 通常也可以在 $id 是该对象表的主键的情况下工作

【讨论】:

【参考方案2】:

你还没有初始化变量$user,所以在控制器中并且在使用它之前你必须添加$user = new User;,假设你已经有use App\User;

或者$user = new \App\User;如果你不这样做。

更新 如果您尝试更新现有的用户记录,您必须初始化 $user 变量,方法是根据应在请求中发送的主键进行选择,然后进行如下初始化:

$user_id = $request->input('user_id');
$user = User::find($user_id);

【讨论】:

他将它用作 laravel 用户对象,以便他可以轻松使用 `$user->save();` 我已经有use App\User; n 代码。我不必做$user =new User; n 代码,因为这个公共函数 register-> 处理应用程序的注册请求。意味着我已经注册了用户名和图像并进行了验证。$this->validator($request->all())->validate();。如果我这样做 $user =new User ,那么我将向用户插入新值。在数据库中,我有一个图像条目,现在是“C:\xampp\tmp\php469E.tmp”。我需要将 tmp 路径更新为公用文件夹路径。 register 函数的范围内没有变量 $user 所以它没有被定义。正在尝试更新用户记录? 是的。更新数据库中用户记录中的图像。如果您检查我上传的错误图像-> 我正在使用图像路径而不是 tmp 路径更新数据库中用户表中的图像

以上是关于laravel-5.4 - 错误:从空值创建默认对象的主要内容,如果未能解决你的问题,请参考以下文章

从空值 Laravel 8 创建默认对象

PHP 5.4:禁用警告“从空值创建默认对象”

PHP警告。从空值中创建默认对象

在 laravel 中具有雄辩关系的更新期间从空值创建默认对象

从 PHP 中的空值创建默认对象?

Laravel 5.4 字段没有默认值