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();
我正在使用 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();