Laravel检查约束违规

gui*_*sen 14 php exception-handling laravel laravel-4

我很好奇是否有办法在删除或将记录插入数据库时​​检查是否存在约束违规错误.

抛出的异常称为"QueryException",但这可能是一系列错误.如果我们可以检查异常特定错误是什么会很好.

Raz*_*zor 32

你正在寻找23000 Error code (Integrity Constraint Violation).如果您看一下QueryException类,它会从中扩展PDOException,因此您可以访问$errorInfo变量.

要捕获此错误,您可以尝试:

try {
  // ...

} catch (\Illuminate\Database\QueryException $e) {
    var_dump($e->errorInfo);
}

// Example output from MySQL
array (size=3)
   0 => string '23000' (length=5)
   1 => int 1452
   2 => string 'Cannot add or update a child row: a foreign key constraint fails (...)'
Run Code Online (Sandbox Code Playgroud)

更具体(重复条目,非空,添加/更新子行,删除父行...),这取决于每个DBMS:

对于laravel,处理错误很容易,只需在"app/start/global.php"文件中添加此代码(或创建服务提供者):

App::error(function(\Illuminate\Database\QueryException $exception)
{
    $error = $exception->errorInfo;
    // add your business logic
});
Run Code Online (Sandbox Code Playgroud)