【问题标题】:Laravel 5 - try catch exception not workingLaravel 5 - 尝试捕获异常不起作用
【发布时间】:2016-01-06 06:55:52
【问题描述】:

我是 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]:

【问题讨论】:

    标签: php exception laravel-5 try-catch


    【解决方案1】:

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

    我也不知道是什么让你使用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
    }
    

    希望这对您有所帮助。快乐编码。干杯。

    【讨论】:

    • 感谢您的回答@user3514160。实际上我正在测试我的应用程序,这就是我需要它的原因。
    • 用什么?? phpUnit 或任何其他测试工具?
    • 我试图注释掉返回布尔 if "Db::delete($sql, ['id' => $id]);"会有错误,但它仍然不会捕获错误。那么有没有办法捕捉错误呢?
    • 然后请用您正在使用和/或正在做的任何事情更新问题。不要只显示错误消息。测试代码在哪里?您在 testfile.php 中编写的代码?此外,您还没有在您的问题中说任何关于测试的内容。您的代码看起来像控制器而不是测试。请更新问题。
    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 2018-05-31
    • 1970-01-01
    • 2021-12-13
    • 2011-12-05
    • 2014-05-11
    • 2020-07-31
    • 1970-01-01
    相关资源
    最近更新 更多