【问题标题】:Laravel 5.8: Creating default object from empty valueLaravel 5.8:从空值创建默认对象
【发布时间】:2021-10-30 10:57:27
【问题描述】:

我正在使用 Laravel 5.8,我已将此代码添加到我的控制器中:

public function denyRequest($id)
    {
        $findRequest = WithdrawWallet::find($id);
        $findRequest->status = 'cancelled';
        $findRequest->save();
        return redirect()->back();
    }

这是路线:

Route::get('{id}','Wallet\WalletController@denyRequest')->name('denyRequest');

现在我收到此错误:

ErrorException (E_WARNING) 从空值创建默认对象

指的是这个:

那么这里到底出了什么问题?如何解决这个问题?

【问题讨论】:

  • 先检查你的集合$findRequest是否不为空,然后尝试更新它。

标签: php laravel laravel-5.8


【解决方案1】:

当你用一个不存在的 id 搜索现有的 Withdraw Wallet 时,它会返回 null。并且由于您将'cancelled' 分配为变量的对象属性,php 会将$findRequest 转换为默认对象(StdObject::class),以便能够将属性分配给它。

一个简单的解决方案是使用findOrFail() 而不是find(),当ID 不存在于您的数据库中时将触发异常并在请求中返回404 响应。

$findRequest = WithdrawWallet::findOrFail($id);
$findRequest->status = 'cancelled';
$findRequest->save();

return redirect()->back();

另一个建议(如果您对模型进行了软删除并且 id 存在于数据库中)是使用 withTrashed()

$findRequest = WithdrawWallet::withTrashed()->findOrFail($id);
$findRequest->status = 'cancelled';
$findRequest->save();

return redirect()->back();

【讨论】:

    【解决方案2】:

    find 替换为findOrFail

    $findRequest = WithdrawWallet::findOrFail($id);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 2018-07-18
      • 2019-03-14
      • 1970-01-01
      • 2021-05-22
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多