2015-11-12 13 views
10

Tất cả những gì tôi đang cố gắng làm là xác minh một truy vấn.Làm thế nào để bắt ngoại lệ truy vấn trong laravel để xem nó có bị lỗi không?

'SELECT * from table_that_does_not_exist' 

Nếu không có lỗi xảy ra, tôi muốn biết nó không thành công để tôi có thể trả về phản hồi "Lỗi: bảng không tồn tại" hoặc lỗi chung.

+0

Nếu bạn đang sử dụng 'Eloquent' cho truy vấn của bạn, bạn có thể sử dụng' firstOrFail() 'trên DB :: thô()' truy vấn '. Hoặc một 'try {} catch (Illuminate \ Database \ QueryException $ ex) {}' –

+0

Tôi đã thử try catch tuy nhiên, nó vẫn hiển thị lỗi. Ví dụ: thử { $ results = DB :: connection ('myDB') -> chọn ('BAD TEXT QUERY SHOULD FAIL'); } bắt (Illuminate \ Database \ QueryException $ e) { // Không làm bất cứ điều gì } – KingKongFrog

+1

'try {$ results = \ DB :: connection (" example ") -> select (\ DB :: raw ("SELECT * FROM unknown_table")) -> đầu tiên(); } catch (\ Illuminate \ Database \ QueryException $ ex) {die ("Bắt lỗi"); } 'Ném và' chết' "Bị bắt lỗi". Bạn đã có \ trước khi chiếu sáng? Tôi chỉ nhận ra rằng tôi đã quên điều đó trong bình luận đầu tiên của mình. Ngoài ra, bạn '$ ex' sẽ mở rộng lớp' Exception' cơ sở, vì vậy bạn có thể gọi '$ ex-> getMessage()' để trả về lỗi chính xác. –

Trả lời

24

Cách đơn giản nhất để đón bất kỳ sql cú pháp hoặc truy vấn lỗi này là để đón một Illuminate\Database\QueryException sau khi cung cấp đóng cửa để truy vấn của bạn:

try { 
    $results = \DB::connection("example") 
    ->select(\DB::raw("SELECT * FROM unknown_table")) 
    ->first(); 
    // Closures include ->first(), ->get(), ->pluck(), etc. 
} catch(\Illuminate\Database\QueryException $ex){ 
    dd($ex->getMessage()); 
    // Note any method of class PDOException can be called on $ex. 
} 

Nếu có bất kỳ lỗi, chương trình sẽ die(var_dump(...)) bất cứ điều gì nó cần.

Lưu ý: Đối với không gian tên, trước tiên bạn cần \ nếu lớp học không được bao gồm dưới dạng tuyên bố use.

Ngoài ra để tham khảo: Laravel 5.1 API - Query Exception

Các vấn đề liên quan