Come utilizzare Try / catch e la transazione del database in PHP e laravel [closed]

1

Sto pianificando di utilizzare Try / Catch e Database Transaction in Laravel5 e il mio progetto PHP per convalidare qualsiasi errore si verifica quindi il rollback evitando di perdere la mia transazione o le informazioni durante l'utente fare la loro transazione al Database. Sono sicuro di scoprire se qualche metodo ha fatto con lo stato di successo o con lo stato di non successo, ma non capisco ancora molto sulla transazione Try / Catch con Database specialmente con BeginTransaction () e Commit (). Rollback () metodo buildin in Larvel5. Ho fatto con questa funzione, ma alla fine non so quanti errori si verificheranno durante questa transazione. Quando e in che modo trovare gli errori (se si verifica un errore) e tornare agli utenti? In Return nel metodo DB :: commit () restituirò tutto lo stato all'utente finale, ma in che modo il catch eseguirà il proprio compito se si verifica un errore e che tipo di errori si verificano. Esempio: \

public function my_method(){
DB::beginTransaction():
try {
    $this->data['a'] =  $this->select();
    $this->data['b'] =  $this->delete();
    $this->data['c'] =  $this->update();
    $this->data['d'] =  $this->insert();
DB::commit();
return ['data'=>$this->data];
       //I planing return all the return back from each method to user.
} catch(EXCEPTION $e){
           DB::rollback()
            throw $e
           }
}

private update(){ if(done){return true}}
private delete(){ if(done){return true}}
private insert(){ if(done){return true}}
private select(){ if(done){return true}}
    
posta Heng Sopheak 19.05.2016 - 08:56
fonte

1 risposta

3

Prima di tutto, anche se PHP è insensibile alle maiuscole di classe, riscrivere EXCEPTION in Exception in quanto è più facile da leggere. Inoltre, ti mancano alcuni semi-due punti. Prima aggiusterei quelle poche cose!

Non ho molta familiarità con le classi del database di Laravel, ma presumo che tu stia usando Eloquent? In tal caso potresti essere in grado di rilevare l'eccezione \Illuminate\Database\QueryException nel blocco catch try e gestire il rollback in questo modo. Qualcosa del genere dovrebbe funzionare:

    try {
        // do your database transaction here
    } catch (\Illuminate\Database\QueryException $e) {
        // something went wrong with the transaction, rollback
    } catch (\Exception $e) {
        // something went wrong elsewhere, handle gracefully
    }

link

Se utilizzi PDO di tipo diretto, ti consigliamo di provare la stessa strategia come sopra ma per l'eccezione PDOException .

link

    
risposta data 19.05.2016 - 13:02
fonte

Leggi altre domande sui tag