php - laravel try/catch 不适用于失败的查询

标签 php laravel laravel-5.4

我有一个 INSERT 查询可能会由于数据库中的某些唯一键而失败所以我使用 try/catch 来避免错误...顺便说一句 form_id 是唯一的

    try {

        $reward = new UserCreditForm();
        $reward->user_id = $form->user_id ;
        $reward->form_id = $form->id ;
        $reward->amount = $amount ;
        $reward->result = $result ;
        $reward->save();
        $form->result = $result ;
        $form->save();

    }
    catch ( Exception $e )
    {
        $form->error_flag = 6 ;
        $form->save();
    }

但是当 uniqu 键失败时 try/catch 不起作用,我得到了

Whoops, looks like something went wrong.
(2/2) QueryException

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'user_credit_forms_form_id_unique' (SQL: insert into `user_credit_forms` (`user_id`, `form_id`, `amount`, `result`, `updated_at`, `created_at`) values (2, 1, 499392, 1, 2017-08-31 14:45:06, 2017-08-31 14:45:06))

如果查询失败,有没有办法避免错误并跳到捕获部分?

最佳答案

您应该使用 catch (\Exception $e ) 来捕获 try 中的所有异常。

最终形式应该是这样的:

try {

    $reward = new UserCreditForm();
    $reward->user_id = $form->user_id ;
    $reward->form_id = $form->id ;
    $reward->amount = $amount ;
    $reward->result = $result ;
    $reward->save();
    $form->result = $result ;
    $form->save();

}
catch ( \Exception $e )
{
    $form->error_flag = 6 ;
    $form->save();
}

关于php - laravel try/catch 不适用于失败的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45979024/

相关文章:

php - Artisan Migrate 被机器拒绝

php - Illuminate\Database\QueryException (2002) SQLSTATE[HY000] [2002] 没有这样的文件或目录 (SQL : select * from `rents` )

php - JOINED 时将不存在的行检索为 NULL

MySQL 数据库的 PHP foreach() 函数和 <input/> 函数

php - Ajax 调用后更新 PHP 变量

javascript - 使用 ajax 和 laravel 提交表单

php - Laravel - 多个表的单个模型

php - 确定用户个人资料是否属于 Laravel 中的当前用户

php - 是否有任何通用的 CRUD 客户端应用程序?

php - Laravel 路由问题与 web.php 中的路由顺序