Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: nette - výjimka při mazání řádku z databáze s cizím klíčem

Aktivity
Avatar
Dominika Šulcová(dominiQa):17.4.2014 16:50

ahoj, mám tabulku 'kategorie_au­t'(nákladáky, osobáky, motorky, autobusy) a pak tabulku 'auta' která má cizí klíč 'ID_kategorie_aut'. takhle mám akci na smazání kategorie:

public function actionRemoveKategorieAuta($id) {
        $kategorie = $this->context->kategorieModel->find($id);
        if(!$kategorie) {
            $this->error('neplatné id!');
        }
        try     {
            $this->context->kategorieModel->delete($id);
            $this->flashMessage("Kategorie aut byla smazána.");
        }
        catch (Exception $e) {
            $this->flashMessage("Tato kategorie nemůže být smazána.", 'errorFlash');
        }
        $this->redirect('kategorie');
    }

jenomže problém nastává pokud chci smazat například kategorii 'Autobusy' a v tabulce 'auta' mám vložen sloupec s cizím klíčem odkazující na 'Autobusy'. Zavolá se výjimka i když to mám v try-catch.
Nevíte proč se mi ta výjimka zavolá, když jí mám ošetřenou? díky

Odpovědět
17.4.2014 16:50
I ♥ nutella
Avatar
Nikola Sterziková (PaNika):17.4.2014 17:28

Ahoj,
tohle dělat nemůžeš. Od toho cizí kliče v relačních databázích jsou, aby mimo jiné zabránily smazání hodnoty, na kterou se odkazují jiné záznamy.
Můžeš udělat to, že do tabulky s číselníkem kategorií přídáš sloupec JeAktvni, který bude TRUE nebo FALSE a místo mazání, nastavíš hodnotu JeAktvni=FALSE. Při zadávání nových záznamů pak zobrazuješ jen ty aktivní kategorie, ale když někdo bude prohlížet starší záznam o autě, které bude zařazeno do již neaktivní kategorie, zobrazí se mu správně.
Nikola

 
Nahoru Odpovědět
17.4.2014 17:28
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.