Ergebnis 1 bis 4 von 4

Thema: DCA löschen eines Datensatzes

  1. #1
    Contao-Nutzer Avatar von jenny89
    Registriert seit
    31.03.2014.
    Ort
    Münster
    Beiträge
    21

    Standard DCA löschen eines Datensatzes

    Hallo nach längerer Pause habe ich meine Arbeit wieder aufgenommen. Ich habe folgendes Problem:
    Ich habe 3 Tabellen im DCA angelegt. Mitarbeiter, Projekt und Abteilung. In der Tabelle Projekt, habe ich eine Spalte Mitarbeiter, die ich mittels foreignKey aus der Tabelle Mitarbeiter geholt habe. Hier können mittels Multiselect mehrere Mitarbeiter ausgewählt weden.
    Jetzt möchte ich, wenn ich einen Mitarbeier lösche, dass überprüft wird, ob dieser Mitarbeiter noch einem Projekt zugeordnet ist. Wenn ja, dann soll ein Hinweis erfolgen mit der Möglichkeit Aktionen auszuwählen z. B. Mitarbeiter löschen und aus allen Projekten zu löschen oder das Löschen abzubrechen.

    Gibt es hierzu in contao eine fertige Funktion oder muss man dies selber abfangen?

    Vielen Dank schon mal im Voraus.

    Jenny

  2. #2
    Contao-Urgestein
    Registriert seit
    03.06.2010.
    Ort
    Wuppertal
    Beiträge
    2.149
    User beschenken
    Wunschliste

    Standard

    Dafür gibt es Callbacks.

    Hier spezifisch:
    Code:
    ondelete_callback

  3. #3
    Contao-Nutzer Avatar von jenny89
    Registriert seit
    31.03.2014.
    Ort
    Münster
    Beiträge
    21

    Standard

    Danke Flex!
    Das hatte ich mir auch schon so gedacht.

    Jetzt habe ich ein weiteres Problem:

    Ich habe den ondelete_callback angelegt und die grundlegende Funktionalität getestet:

    PHP-Code:
        public function MitarbeiterLoeschen(DataContainer $dc$undo_id)
        {
    #undo Eintrag löschen        
    $undo_lo $this->Database->prepare("DELETE FROM tl_undo WHERE id=?"
                                       ->
    execute($undo_id);

            
    Message::addError('<b>Achtung:</b></br> Der Datensatz konnte nicht gelöscht werden, da noch Verknüpfungen zu anderen Einträgen existieren!');
            
    System::redirect('contao/main.php?do=mitarbeiter');    
            } 
    Mein Problem ist jetzt, dass ich die Mitarbeiter in eine andere Tabelle per foreignKey eingebunden habe und da zu einem Projekt mehrere Mitarbeiter gehören dies mit einem multiselect geschehen ist.
    Die Daten werden in folgender Form in der Tabelle abgespeichert:

    'a:1:{i:0;s:1:"5";}

    Dies kann man wohl mit deserialize wieder umwandeln.

    Aber wie finde ich aus der Projekt-Tabelle alle Einträge, in denen der Mitarbeiter vorkommt?

    Mein Ansatz wäre zuerst alle Einträge heraussuchen, in denen die ID des Mitarbeiters vorkommt (SELECT... WHERE id IN...) und danach diese Datensätze überprüfen, ob es sich wirklich um eine ID handelt, da es ja auch ein anderer Parameter sein kann.

    Oder gibt es eine elegantere Lösung?

    Ich hoffe Ihr könnt mir hierbei auch helfen.

    Liebe Grüße
    Jenny

  4. #4
    Contao-Nutzer Avatar von jenny89
    Registriert seit
    31.03.2014.
    Ort
    Münster
    Beiträge
    21

    Standard

    Habe das Problem jetzt wie folgt gelöst:
    Ich lese alle Datensätze aus der Projekte - Tabelle und überprüfe dann ob der zu löschende Mitarbeiter im Feld leitung, stellvertreter oder mitarbeiter vorhanden ist.

    PHP-Code:
        public function MitarbeiterLoeschen(DataContainer $dc$undo_id)
        {
            
    $datensatz_vorhanden false;
            
    $ds_amt $this->Database->prepare("SELECT id,leitung,stellvertreter,mitarbeiter,titel FROM tl_vr_aemter")
                                        ->
    execute();
            while(
    $ds_amt->next())
            {
                  
    $ds_mitarbeiter deserialize($ds_amt->mitarbeiter);
                if (
    in_array($dc->id$ds_mitarbeiter)) {
                    
    $datensatz_vorhanden true;            
                }
                elseif(
    $dc->id == $ds_amt->leitung) {
                    
    $datensatz_vorhanden true;            
                }
                elseif(
    $dc->id == $ds_amt->stellvertreter) {
                    
    $datensatz_vorhanden true;            
                }
                
            }
            
            
            if(
    $datensatz_vorhanden == true){
            
    $undo_lo $this->Database->prepare("DELETE FROM tl_undo WHERE id=?"
                                       ->
    execute($undo_id);
            
    Message::addError('<b>Achtung:</b></br> Der Datensatz kann nicht gelöscht werden, da noch Verknüpfungen zu anderen Einträgen existieren!');
            
    System::redirect('contao/main.php?do=mitarbeiter');    
            }
            } 

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •