我想知道elqoint的save()
可能引发的错误或异常。在laravel中,我在保存或更新模型时一直在做以下操作。
// create or update some data
if($model->save()){
// continue
return true;
}
throw new Exception('Model could not be saved');
我不喜欢用if
语句包围save()
来检查模型是否保存。如果它抛出一个异常,我很想把它包装在try..catch
块中,比如
try{
// create or update some data
$model->save()
// continue
return true;
catch(SomeException $e){
throw new Exception('Model could not be saved');
}
那么,拉拉威尔雄辩的文集save()
会出错吗?或者,我只是想得太多了?
我遇到的唯一异常是当我设置了外键约束并在代码中(或由用户)破坏它们时,这将抛出如下形式的QueryException:
IlluminateDatabaseQueryException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails ...
如果你想要明确的异常抛出,我可以想出2.5种方法:
从基本模型扩展并覆盖
save()
方法,这样,如果它返回false,它就会抛出自己的异常供您捕获。扩展并将方法命名为
saveOrFail()
,而不是重写。使用此库的
saveOrFail()
方法(与#1相同),但将其抽象掉(https://github.com/dwightwatson/validating)。
laravel雄辩的collection save()会出错吗
是的,在幕后,save方法调用了一些模型事件,如创建和保存,如果出现问题,则返回false。阅读有关模型事件的更多信息
如果出现问题,Laravel的App::error将为您处理异常。
App::error(function(Exception $exception, $code)
{
});
在Laravel 9中,我注意到如果我不在模型中提供默认值作为关联数组,save()方法就会崩溃。文档中没有提到这种情况,只是说我可以自由定义默认值,但没有提到如果我不这样做会发生什么。事实上,我不得不这样做。这是误导/错误的,会给开发带来很多麻烦和延误。
https://laravel.com/docs/9.x/eloquent#default-属性值