it-swarm.com.de

ID des gelöschten Datenbankeintrags holen

Ich möchte eine Löschmethode erstellen, die einen Eintrag in einer Tabelle UND die angehängten Einträge in einer zweiten Tabelle löscht.

Dies ist meine Quelle bis jetzt:

        // Delete entry in users_handles
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);            

        $conditions = array(
            $db->quoteName('userid') . ' = ' . $db->quote((int)$userid), 
            $db->quoteName('type') . ' = ' . $db->quote($type),
        );

        $query->delete($db->quoteName('#__bestia_users_handles'));
        $query->where($conditions);

        $db->setQuery($query);
        $result = $db->execute();

        $db = JFactory::getDbo();
        $query = $db->getQuery(true);            

        $conditions = array($db->quoteName('handleid') . ' = ' . GET ID FROM ENTRY THAT HAS BEEN DELETED BEFORE));

        $query->delete($db->quoteName('#__bestia_users_handles_mapping'));
        $query->where($conditions);

        $db->setQuery($query);
        $result = $db->execute();

Ist das möglich?

2
MyFault

Hier ist ein Beispiel, wie Ihre Abfrage funktionieren würde

function delete($userid)
{
    // Delete entry in users_handles
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);            

    $conditions = array(
        $db->quoteName('userid') . ' = ' . $db->quote((int)$userid), 
        $db->quoteName('type') . ' = ' . $db->quote($type),
    );

    $query->delete($db->quoteName('#__bestia_users_handles'));
    $query->where($conditions);

    $db->setQuery($query);
    $db->execute();

    $query->clear();

    $query = $db->getQuery(true);  

    $conditions = array($db->quoteName('handleid') . ' = ' . $userid));

    $query->delete($db->quoteName('#__bestia_users_handles_mapping'));
    $query->where($conditions);

    $db->setQuery($query);
    $db->execute();
}

Sie werden sehen, dass ich $query->clear(); verwendet habe, um die Daten aus der Abfrage zu löschen.

Dann verwenden Sie einfach $userid Für beide Abfragen.

0
Lodder

Ich gehe davon aus, dass Sie MySQL und InnoDB verwenden. Es wäre schneller, einfacher und ressourcenschonender, MySQL FOREIGN KEY-Einschränkung zu verwenden und CASCADE in ON DELETE in Fremdschlüsseldefinition hinzuzufügen. Kurz gesagt, es werden alle untergeordneten Tabellenzeilen gelöscht, die auf übergeordnete Tabellenzeilen verweisen, die gelöscht werden. Dies erfordert auch keine Änderungen in der Modelldatei. Sie löschen nur übergeordnete Tabellenzeilen (wie dies normalerweise beim Modell der Fall ist) und das Datenbanksystem erledigt den Rest. Wenn Sie MySQL Workbench verwenden, um Ihre Datenbank hier zu erstellen, können Sie einen Ort finden, an dem Sie diese Funktion ausführen können:

enter image description here

Nützliche Links:

1
Artur Stępień