【问题标题】: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() 函数不成功,它会自己抛出异常吗?

【问题讨论】:

标签: php database laravel exception-handling transactions


【解决方案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找到更多关于它的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2014-10-20
    相关资源
    最近更新 更多