在什么情况下,拉拉维尔雄辩的集合 save() 会出错?



我想知道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种方法:

  1. 从基本模型扩展并覆盖save()方法,这样,如果它返回false,它就会抛出自己的异常供您捕获。

  2. 扩展并将方法命名为saveOrFail(),而不是重写。

  3. 使用此库的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-属性值

最新更新