Bạn đang tìm kiếm 23000 Error code (Integrity Constraint Violation)
. Nếu bạn xem qua lớp QueryException
, nó kéo dài từ PDOException
, vì vậy bạn có thể truy cập vào biến số $errorInfo
.
Để bắt lỗi này, bạn có thể thử:
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 (...)'
Để cụ thể hơn (entry trùng lặp, không null, thêm/cập nhật hàng trẻ em, xóa hàng mẹ ...), nó phụ thuộc vào mỗi DBMS :
- PostgreSQL và SQL server theo quy ước tiêu chuẩn SQL cho
SQLSTATE
mã, do đó bạn có thể trả về giá trị đầu tiên từ mảng $e->errorInfo[0]
hoặc gọi trực tiếp $e->getCode()
- MySQL, MariaDB và SQLite không chấp hành nghiêm chỉnh các quy tắc, vì vậy bạn cần phải trả về giá trị thứ hai từ mảng
$e->errorInfo[1]
Đối laravel, xử lý lỗi này là dễ dàng, chỉ cần thêm đoạn mã này trong "app/bắt đầu/global.php" tập tin (hoặc tạo một service provider):
App::error(function(\Illuminate\Database\QueryException $exception)
{
$error = $exception->errorInfo;
// add your business logic
});
nó không làm việc với tôi: ( Vẫn còn vi phạm trang web – itsazzad
hãy cụ thể hơn về lỗi này, có thể bạn đang sử dụng lỗi xử lý phù thủy Laravel 5 [ khác nhau] (http://laravel.com/docs/5.0/errors#handling-errors) – Razor
im sử dụng laravel4 và thử bắt không hoạt động nếu có sự trùng lặp trong mục nhập cơ sở dữ liệu. Nó chỉ ném lỗi và tôi chưa biết cách bắt nó theo cách khác. – itsazzad