rafalp
8.08.2011, 17:14:57
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
8.08.2011, 17:16:08
No ale używasz tego w jakimś kodzie php? To go pokaż.
rafalp
8.08.2011, 17:22:44
public function delete($id = null)
{
$model = Model::factory('Transport')->load($id);
if(! $model->loaded())
{
message::error('błąd id');
}
if($model->delete()) // tutaj wyrzuca "foreign key constraint fails"
{
message::success('deleted_success');
}
else
{
message::error('error_db');
}
}
Smertius
8.08.2011, 21:01:12
Jeśli korzystasz z PDO to można zastosować coś takiego:
try {
$obj->delete();
} catch (\PDOException $e) {
//1451 to kod błędu Cannot delete or update a parent row: a foreign key constraint fails (%s)
//Który jest zwracany przez MySQL
if ($e->errorInfo[1] == 1451) {
$obj->deleteParentRow();
} else {
//Tutaj obsługa innych błędów
}
}
rafalp
8.08.2011, 22:32:14
Dzięki, pracuję w Kohanie, zastosowałem Kohana_Database_Exception i jest OK