Laravel 5 - 尝试捕获异常不起作用

时间:2016-01-06 06:55:53

标签: php exception laravel-5 try-catch

我是laravel5的新手,这段代码无法捕获所有异常。 我不知道出了什么问题,请帮助。

public function delete($id)
{
    $sql = $this->deleteSql();

    DB::beginTransaction();
    try {
        $deleteData = Db::delete($sql, ['id' => $id]);
        if (!$deleteData) {
            return false;
        }

        return true;
    } catch (\Exception $e) {
        DB::rollback();
        return $e->getMessage();
    }

    DB::commit();
}

它会给我:

Illuminate \ Database \ QueryException:SQLSTATE [22P02]:引起的 PDOException:SQLSTATE [22P02]:

1 个答案:

答案 0 :(得分:-1)

您的方法根本不会catch阻止,因为它从bool块返回try

此外,我不知道是什么让你使用try...catch阻止。

我更多错误:

Db::delete($sql, ['id' => $id]);

如果您已定义Db,那就没关系。但如果没有,则会引发错误。

除非您使用任何PHP测试工具(如phpUnit / phpSpec等)测试您的应用程序,否则无需使用事务。

<强>解决方案:

根本不需要使用try..catch块。

只需在您要删除的模型上调用delete方法,就可以完成,如下所示:

public function delete($id)
{
    YourModel::delete($id); // Replace YourModel with the model you wish to delete

    \Session::flash('delete_message', 'Model has been successfully deleted.');

    return redirect()->back(); // or anywhere else of your choice
}

希望这会帮助你。快乐的编码。欢呼声。