首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

完善你的Laravel异常处理

这篇文章我们来简单梳理一下Laravel中提供的异常处理能力,然后讲一些在开发中使用异常处理的实践,如何使用自定义异常、如何扩展Laravel的异常处理能力。...Illuminate\Database\QueryException Laravel中执行SQL语句发生错误时会抛出此异常,它也是使用率最高的异常,用来捕获SQL执行错误,比方执行Update语句时很多人喜欢判断...Database\Eloquent\ModelNotFoundException 通过模型的 findOrFail和 firstOrFail方法获取单条记录时如果没有找到会抛出这个异常( find和 first找不到数据时会返回...($exception instanceof ModelNotFoundException && $request->expectsJson()) { //捕获路由模型绑定在数据库中找不到模型后抛出的...接口类实例,在这种情景下我们因为捕获到了 QueryException的异常实例而抛出了 UserManagerException的实例,然后通过这个参数将 QueryException实例传递给 PHP

2.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在Laravel中使用数据库事务以及捕获事务失败后的异常

    Description 在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法。如果在事务的闭包内抛出异常,事务将会被自动还原。...那么要实现这种数据结构就需要三个表: 知识点表 wiki: 考点表 tag: 考点知识点关联表 wiki_tag_rel 现在要开启事务新增Wiki数据,新增wiki成功后再把它关联到指定的考点上去 (在laravel...中使用查询构建器或者Eloquent ORM执行query时,如果失败会返回 Illuminate\Database\QueryException 异常) <?...php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Database\QueryException...的关系(写入中间表) $newWiki->tags()->attach($tagIds); DB::commit(); } catch(QueryException

    1.3K40

    通过 Laravel 查询构建器实现简单的增删改查操作

    通过前面几篇教程的预热,我们已经连接上数据库,创建好了数据表,填充好了数据,接下来,就是在 Laravel 应用中实现对数据库的增删改查了。..., [$name, $email, $password]); 如果插入成功,返回 true,插入失败,则抛出 QueryException 异常。..., [$name, $id]); 如果更新成功,返回受影响行数,如果更新数据与原记录数据一样,则返回0,如果更新出错,则抛出 QueryException 异常。..., [$id]); 和更新语句一样,如果删除成功,该方法返回受影响行数,删除记录不存在,返回 0,删除出错,抛出 QueryException 异常。...'@qq.com', 'password' => bcrypt('789')], ]); 同样,如果插入出错,抛出 QueryException 异常,如果是一次插入多条记录的话,会整体中断,一条都不会插进去

    4.2K20

    深入研究 Laravel ORM (Laravel Eloquent) 系统 (一) – 概要

    本文作为 Laravel ORM 系统的研究开篇,主要对 Laravel ORM 系统的主要功能、依赖的第三方类库、系统的目录结构及对应目录所实现的功能,进行解释说明。...一、Laravel ORM 概要 Illuminate database(Laravel ORM) 组件 在 GitHub 的地址 1.1 Laravel ORM 简介 Illuminate database...此外还提供在 Laravel 框架内使用的数据库抽象层 DB 类。 非但如此,database 组件提供了能在非 Laravel 框架以外的项目使用接口 Capsule 类。...二、 Laravel ORM 核心组件目录结构 前面我们大致了解了 Laravel ORM 系统整体的目录结构,本节我们重点走进 illuminate/database 文件夹,即 Laravel ORM...SQLiteConnection.php SQLite 数据库连接类 |---- SqlServerConnection.php SQL Server 数据库连接类 |---- QueryException.php

    5K20

    laravel 学习之路 配置config

    前面文章路由与控制器我们都了解了,现在了解一下laravel的config配置 配置项 laravel 的配置项是在根目录下的 /config 目录中,还有一个是根目录下的 .env文件 ?...不过是作为一个参数传给了 env() 函数,我们来了解下这个函数 它是用来获取 .env 文件中的配置的 它有2个参数 第一个参数就是配置项名 第二个参数就是默认值 'name' => env('APP_NAME', 'Laravel...') 到这里这句代码的意思就很明显了,从 .env 获取 APP_NAME 的值,如果 .env 中不存在 APP_NAME 那就取默认值 Laravel 在 config/database.php...其中有一行写了 .env ,它的作用就是告诉 git 忽略 .env 文件,所以如果你去 github 上看别的 laravel 项目的时候你会发现并没有 .env 文件....[Illuminate\Database\QueryException] SQLSTATE[42000]: Syntax error or access violation: 1071

    2.1K10

    Laravel源码解析之QueryBuilder

    $e) { //捕获到QueryException试着重连数据库再执行一次SQL $result = $this->handleQueryException(...异常, 异常会包含SQL和绑定信息 catch (Exception $e) { throw new QueryException( $query, $this...); $statement->execute(); return $statement->fetchAll(); }); 直到getPdoForSelect这个阶段Laravel...通过梳理流程我们知道: Laravel是在第一次执行SQL前去连接数据库的,之所以$pdo一开始是一个闭包因为闭包会保存创建闭包时的上下文里传递给闭包的变量,这样就能延迟加载,在用到连接数据库的时候再去执行这个闭包连上数据库...在程序中判断SQL是否执行成功最准确的方法是通过捕获 QueryException异常 Processor后置处理结果集 processor是用来对SQL执行结果进行后置处理的,默认的processor

    1.9K50

    Laravel Valet - macOS 极简主义者的开发环境

    Laravel Valet 介绍 2. Laravel Valet 安装 3. 测试 Laravel Valet 4. PHP 版本 5. 服务站点 6. 定制 Valet 驱动 7....Laravel Valet 介绍 ---- Laravel Valet 是 macOS 极简主义者的开发环境。...定制 Valet 驱动 ---- Valet 是为 Laravel 定制的开发环境,默认是不支持 ThinkPHP 等常用框架和 CMS 但是可以自己编写 Valet 驱动程序在 Valet 本身不支持的框架或...CMS 上运行 PHP 应用程序提供服务 安装 Valet 时,会在 ~/.config/valet/Drivers 目录中创建一个包含 SampleValetDriver.php,这是一个驱动程序实现示例...,用于演示如何编写自定义驱动程序,编写驱动程序只需要实现三个方法: servers、isStaticFile、frontControllerPath 这三个方法都接收 sitePath、siteName

    4.2K30
    领券