Php Laravel 4-无法捕获种子或迁移类中的数据库异常

Php Laravel 4-无法捕获种子或迁移类中的数据库异常,php,laravel-4,try-catch,Php,Laravel 4,Try Catch,Laravel4和MySql数据库。 由于某些原因,我无法捕获seed或迁移类中的DB异常(Lightning\Database\QueryException):代码从未进入catch块 例如,如果我尝试在列“name”唯一的表上插入: try { $data = array('id' => 1, 'name' => 'foo'); DB::table('table')->insert($data); } catch (\Exception $e) {

Laravel4和MySql数据库。 由于某些原因,我无法捕获seed或迁移类中的DB异常(Lightning\Database\QueryException):代码从未进入catch块

例如,如果我尝试在列“name”唯一的表上插入:

try {
    $data = array('id' => 1, 'name' => 'foo');
    DB::table('table')->insert($data);
}
catch (\Exception $e) {
    $this->command->error("SQL Error: " . $e->getMessage() . "\n");
}
…我总是遇到这样的错误:

PHP Warning: Uncaught exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
  • 我试图捕获异常、\Exception、\PDOException、\Illumb\Database\QueryException等,但没有成功
  • 我可以捕获其他类型的异常(例如,除零等)
  • 我可以在routes.php内捕获QueryException,同样的代码工作正常:代码输入'catch',我得到消息“SQL错误:etc.”,但没有发出警告(正确)
有什么想法吗? 谢谢您的帮助。

您必须捕获“照亮\数据库\查询异常”

多亏了你,我终于明白了这个问题

显然,它与XDebug有关,并且只在Mac OS X上的PHP上出现(我在Windows上尝试了几个PHP,但从未遇到过这个问题),并且只在通过CLI运行迁移或seed时出现(例如PHP artisan db:seed--class=className)

它与这些XDebug设置相关:

xdebug.var_display_max_depth = -1
xdebug.var_display_max_children = -1
xdebug.var_display_max_data = -1
我不知道确切的原因,但这导致QueryException从未被捕获,PHP向我展示了整个异常堆栈


如果我对这些选项进行注释,或者将它们设置为更合适的值(例如10),或者禁用XDebug(这不是一个好的解决方案),那么一切都正常运行,在迁移/种子中,我可以捕获QueryException。

谢谢阿拉丁。不幸的是,它没有工作,我得到了“PHP警告…SQL异常等”,异常没有被捕获。注意:相同的代码(相同的GIT项目)在Windows机器(WAMP)上运行正常(我可以捕获异常);在Mac(MAMP)id上运行不起作用。发生了什么?
xdebug.var_display_max_depth = -1
xdebug.var_display_max_children = -1
xdebug.var_display_max_data = -1