laravel save() 方法是不是抛出异常?
Posted
技术标签:
【中文标题】laravel save() 方法是不是抛出异常?【英文标题】:Does laravel save() method throws exception?laravel save() 方法是否抛出异常? 【发布时间】:2019-05-12 11:25:47 【问题描述】:我有一个小问题。这是我的代码:
DB::beginTransaction();
try
$created = new TransportTypeColumn();
$created->name = $translated_ids[0];
if(!$created->save())
throw new \Exception("failed saving transport type column");
DB::commit();
return response()->json(['success'=>'Property has been created successfully', 'data'=>$created],200);
catch(\Exception $e)
DB::rollback();
return response()->json(['error'=>'Something went wrong, please try later.'], 500);
所以我需要这段代码吗? :
if(!$created->save())
throw new \Exception("failed saving transport type column");
如果 save() 函数不成功,它会自己抛出异常吗?
【问题讨论】:
Check if laravel model got saved or query got executed的可能重复 可以设置$saved = $created->save(); $saved === true;
。
【参考方案1】:
save
返回一个布尔值,你需要检查保存是否成功,但除非有mysql错误你不会得到任何异常。
【讨论】:
如果 save() 不起作用,那是不是 mysql 出错了?所以我总是遇到异常......不是吗? 我的意思是save()是否有可能返回false但没有mysql或任何其他异常? 我现在想不到,但我找到了这个laravel.io/forum/…,检查记录是否保存总是好的。【参考方案2】:我知道这个问题已经有了答案,但是对于那些偶然发现并希望抛出异常的人,您可以使用方法saveOrFail()
而不是save()
。
DB::beginTransaction();
try
$created = new TransportTypeColumn();
$created->name = $translated_ids[0];
$created->saveOrFail();
DB::commit();
return response()->json(['success'=>'Property has been created successfully', 'data'=>$created],200);
catch(\Exception $e)
DB::rollback();
return response()->json(
['error'=>'Something went wrong, please try later.'],
$e->getCode()
);
这个方法至少从 Laravel 5.5 开始就存在了,你可以在docs找到更多关于它的信息
【讨论】:
以上是关于laravel save() 方法是不是抛出异常?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5刀片在出现错误而不是抛出异常时显示空白页面
在 model.save 或 model.save 中捕获数据库异常!方法?