Laravel 5.8: 从空值创建默认对象

Laravel 5.8: Creating default object from empty value

我正在使用 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) Creating default object from empty value

这是指这个:

那么这里究竟出了什么问题?如何解决这个问题?

find替换为findOrFail:

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

当您使用不存在的 ID 搜索现有的提款钱包时,它将 return 为空。并且由于您将 'cancelled' 分配为变量的对象属性,因此 php 会将 $findRequest 转换为默认对象 (StdObject::class) 以便能够分配该属性

一个简单的解决方案是使用 findOrFail() 而不是 find(),当您的数据库中不存在该 ID 并且 return 对请求的 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();