Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: foreign key constraint - wychwytywanie relacji przy usuwaniu
Forum PHP.pl > Forum > Bazy danych > MySQL
rafalp
Witam,
Mam tabele z relacjami, no i przy usuwaniu klucza który jest powiązany w innej tabeli (przy RESTRICT) chce dostać jakiś ładny komunikat że najpierw należy usunąć rekord w nadrzędnej tabeli.

Normalnie przy usuwaniu dostajemy error "Cannot delete or update a parent row: a foreign key constraint fails"
Jak zrobić żeby nie pokazywać tego błędu, tylko przechwycić ten błąd?

Czy używać do tego try-catch? Czy można w inny sposób wymusić aby MySQL ładniej zwrócił jakis komunikat który nie zakończy działania skryptu.
nospor
No ale używasz tego w jakimś kodzie php? To go pokaż.
rafalp
  1. public function delete($id = null)
  2. {
  3. $model = Model::factory('Transport')->load($id);
  4. if(! $model->loaded())
  5. {
  6. message::error('błąd id');
  7. }
  8.  
  9. if($model->delete()) // tutaj wyrzuca "foreign key constraint fails"
  10. {
  11. message::success('deleted_success');
  12. }
  13. else
  14. {
  15. message::error('error_db');
  16. }
  17. }
Smertius
Jeśli korzystasz z PDO to można zastosować coś takiego:
  1. try {
  2. $obj->delete();
  3. } catch (\PDOException $e) {
  4. //1451 to kod błędu Cannot delete or update a parent row: a foreign key constraint fails (%s)
  5. //Który jest zwracany przez MySQL
  6. if ($e->errorInfo[1] == 1451) {
  7. $obj->deleteParentRow();
  8. } else {
  9. //Tutaj obsługa innych błędów
  10. }
  11. }
rafalp
Dzięki, pracuję w Kohanie, zastosowałem Kohana_Database_Exception i jest OK smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.