如何在Laravel中查找无效文本表示形式的列名称7整数的错误错误输入语法?

时间:2018-10-12 12:26:46

标签: laravel postgresql

例如我有桌子

create table emp(  
  empno    integer,  
  ename    character varying(255),  
  job      character varying(255),  
  mgr      integer,  
  hiredate timestamp without time zone,  
  sal      double pricision,  
  comm     integer,  
  deptno   integer
)

当我尝试插入

之类的数据时
insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1,'abc','abc','e','2018-10-12 00:00:00',50.50,1,'f');

这会给我一个invalid text representation 7 error invalid input syntax for integer的错误,因为我已经为mgrdeptno插入了字符串值,只能通过查看值才能找到,但是posgresql并没有给我确切的值遇到此问题的列名。有什么办法可以在错误消息本身中获取列名。因为当我们有超过50到60列时,很难找到真正有问题的列。

2 个答案:

答案 0 :(得分:7)

您不必找出哪一列是错误的,因为在插入数据库之前,应确保输入的格式正确。

您正在使用Laravel,因此应利用其提供的强大工具集进行验证:https://laravel.com/docs/5.8/validation

例如,在您的情况下,应在控制器的开头使用以下规则来验证mgr

$request->validate([
    'mgr' => 'number'
]);

如果不遵守规则,将引发异常,因此,当用户尝试输入数据时,而不是在后端尝试将数据插入数据库时​​,失败。

答案 1 :(得分:5)

您可以使用类\Illuminate\Database\QueryException捕获sql查询异常,并可以根据需要自定义sql异常。

try {
    // Add your insert query here.

} catch (\Illuminate\Database\QueryException $e) {

    // Here you can get the sql exception details.
    dd($e->getMessage(), $e->errorInfo); // print for the details info.

    // customzie you error

} catch (\Exception $e) {

    // for the other exception.
    dd($e->getMessage(), $e->errorInfo); // print for the details info.
}

您还可以使用Laravel异常处理在公共位置自定义消息。

https://laravel.com/docs/5.8/errors