2014-09-25 12 views
5

Chcę poznać możliwe błędy lub wyjątki, które mógł spowodować użytkownik należący do elqouent. W laravel robiłem to, co robię podczas zapisywania lub aktualizowania modelu.W jakich przypadkach elokwentna kolekcja save() może działać nieprawidłowo?

// create or update some data 

    if($model->save()){ 
     // continue 
     return true; 
    } 

    throw new Exception('Model could not be saved'); 

nie wolę otaczający save() ze stwierdzeniem if aby sprawdzić, czy model jest zapisane, czy nie. Jeżeli zgłasza wyjątek wówczas, chciałbym zawinąć go w try..catch bloku podobnego

try{  
     // create or update some data 
     $model->save() 
     // continue 
     return true; 
    catch(SomeException $e){ 
     throw new Exception('Model could not be saved'); 
    } 

Tak, można laravel na wymowny kolekcja save() pomylić? Albo, po prostu się nad tym zastanawiam?

+0

Przykłady: baza danych jest uszkodzony, połączenie sieciowe do bazy danych jest uszkodzony, przestrzeń dyskowa jest wypełniony na serwerze bazy danych .... tam tylko kilka potencjalnych przypadków wymienionych –

+0

@MarkBaker Tak masz rację. Ale te wyjątki są poza naszą kontrolą. Oprócz tych błędów serwera, chcę wiedzieć o tych błędach, które mogą być obsługiwane z samego programu. – user4055288

+0

Inne możliwości: przydzielasz identyfikator ręcznie i jest on nieprawidłowy lub wartość niektórych danych łamie ograniczenie klucza obcego w twojej bazie danych –

Odpowiedz

4

Jedynymi wyjątkami Mam napotkanych kiedy mam ustawić klucz obcy ograniczeń i złamał je w moim kodu (lub przez użytkownika), które będą rzucać QueryException w postaci tak:

Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails ... 

Jeśli chcesz wyraźny wyjątek rzucanie, mogę myśleć o 2,5 sposobów:

  1. rozciągają się od modelu bazowego i zastąpić metodę save() tak, że jeśli zwróci false, to th wierszy swój własny wyjątek, aby złapać.

  2. Przedłużyć i zamiast przesłonić, nazwij metodę saveOrFail().

  3. Zastosowanie saveOrFail() metoda ta biblioteka (który robi to samo jako nr 1), ale oderwane od hotelu (https://github.com/dwightwatson/validating).

0

Czy elokwentna kolekcja kolekcji laravel() może pójść źle?

Tak, za sceną metoda zapisu wywołuje kilka zdarzeń modelu, takich jak tworzenie i zapisywanie, które zwracają fałsz, jeśli coś pójdzie nie tak. Przeczytaj więcej o model events

Gdy coś pójdzie nie tak, aplikacja Laravel App :: error poradzi sobie z wyjątkami.

App::error(function(Exception $exception, $code) 
{ 

}); 
+0

Tak, wiem, że Laravel obsługuje dla nas wyjątek. Chcę tylko wiedzieć, czy istnieje bardziej szczegółowy wyjątek. Przeczytałem link. Dziękuję za to. Tak więc, kiedy 'false' jest zwracany ze zdarzeń' tworzenie, aktualizowanie, zapisywanie lub usuwanie', czy rzutuje każdy wyjątek? Jeśli tak, jakie one są? – user4055288

+0

Nie, nie wyrzuca wyjątków, tylko zwraca wartość false. W twoim przypadku możesz użyć QueryException, aby uzyskać konkretny błąd, jeśli naprawdę szukasz błędów podczas zapisywania modelu. –

Powiązane problemy