Как найти имя столбца для недопустимого текстового представления 7 Ошибка неверный синтаксис ввода для целого числа в laravel? - PullRequest
0 голосов
/ 12 октября 2018

Например, у меня есть таблица ...

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поскольку я вставил строковое значение для mgr и deptno, это можно найти только путем просмотра значений, но PostgreSQL не дает мне точное имя столбца, в котором он столкнулся с такой проблемой.Есть ли способ получить имя столбца в самом сообщении об ошибке.Потому что, когда у нас более 50–60 столбцов, трудно найти столбец, в котором есть проблема.

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Вы можете перехватить исключение SQL-запроса с помощью класса \Illuminate\Database\QueryException и настроить исключение 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

0 голосов
/ 19 июня 2019

Вам не нужно выяснять, какой столбец неправильный, потому что вы должны убедиться, что ваши входные данные правильно отформатированы ПЕРЕД вставкой в ​​базу данных.

Вы используете Laravel, поэтому вы должны использовать большойнабор инструментов, который он предлагает для проверки: https://laravel.com/docs/5.8/validation

Например, в вашем случае вы должны проверить mgr, используя следующее правило при запуске вашего контроллера:

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

Это будетвыдает исключение, если правило не соблюдается, и, таким образом, не будет работать, когда пользователь пытается ввести данные, а не когда ваш сервер пытается вставить данные в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...