2014-05-07 16 views
6

Sto provando a catturare un PDOException in laravel 3 ma sembra che non possa farlo. Il mio codice è il seguente:Impossibile catturare PDOException in laravel 3

try{ 
    DB::connection()->pdo->beginTransaction(); 

    Myobject::create($cleaned_input_array); 

    // do other stuff that could possibly throw a custom exception 

    DB::connection()->pdo->commit(); 
} 
catch(\PDOException $e) 
{ 
    DB::connection()->pdo->rollBack(); 
    return HTTP_STATUS::response(BAD_REQUEST, array("error creating"); 
} 
catch(Exception $e) 
{ 
    DB::connection()->pdo->rollBack(); 
    return HTTP_STATUS::response(BAD_REQUEST, array($e->getMessage())); 
} 

L'eccezione generale e 'colto in se le altre parti del 'provare' un'eccezione. Se non lo fanno, tutto scorre pulito. Se il create ha un problema nell'esecuzione dell'istruzione MYSQL, non genera una PDOException, ma genera solo un'eccezione generale.

+0

perché c'è un \ davanti al tuo 'PDOException' – cmorrissey

+0

Ho letto che puoi mettere un '\' davanti a PDOException per i problemi dello spazio dei nomi. Anche se rimuovo '\' non riesco ancora a catturare un PDOException. Dovrei notare che l'errore sulla creazione viene generato come eccezione generale ... – WildBill

+4

Perché non scaricare il tipo di '$ e', ad esempio' get_class ($ e) '? Questo ti dirà almeno il tipo di eccezione che viene catturata nel gestore di eccezioni generale – Phil

risposta

-1

Un modello non avrebbe effettivamente lanciato PDOException, che verrebbe catturato internamente e verrà invece lanciato uno \Illuminate\Database\QueryException, provare a catturarlo.

+0

Anche questo non viene catturato. Per essere chiari, ho semplicemente sostituito '\ PDOException' con' QueryException' nel codice precedente e il normale 'Exception' è tutto ciò che viene catturato. – WildBill

+0

Se il proprio codice è assegnato a un nome, è necessario fornire lo spazio dei nomi completo, altrimenti non verrà mai catturato. – ollieread

+0

Il mio codice non ha il nome distanziato, stavo semplicemente copiando l'esempio che mostrava l'esempio. Ho solo un'istanza di quella classe/metodo. Quindi, la domanda rimane ancora ... – WildBill