Laravel 5 - попробуй ловить исключение не работает

Я новичок в 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();
}

Это даст мне:

Осветить \Database\QueryException: SQLSTATE[22P02]: и вызвано PDOException: SQLSTATE[22P02]:

1 ответ

Ваш метод не собирается catch блокировать вообще, так как он возвращается bool от try блок.

Также я не знаю, что заставило вас использовать try...catch блок.

У меня еще ошибка:

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

Если вы определили Dbтогда это нормально. Но если нет, то это выдаст ошибку.

Также нет необходимости использовать транзакции, если только вы не тестируете свое приложение с помощью какого-либо инструмента PHP Testing, например phpUnit / phpSpec и т. Д.


Решение:

Там нет необходимости использовать try..catch блокировать вообще.

Просто вызовите метод удаления для модели, которую вы хотите удалить, и все готово, вот так:

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
}

Надеюсь, что это помогает вам. Удачного кодирования. Приветствия.

Другие вопросы по тегам