web-dev-qa-db-fra.com

Obtenir l'ID de l'entrée de base de données supprimée

Je voudrais créer une méthode de suppression, qui supprime une entrée dans une table ET les entrées attachées dans une deuxième table.

Ceci est ma source jusqu'à présent:

        // 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();

Est-ce possible?

2
MyFault

Voici un exemple de fonctionnement de votre requête

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();
}

Vous verrez que j'ai utilisé $query->clear();, qui efface les données de la requête.

Ensuite, utilisez simplement $userid Pour les deux requêtes.

0
Lodder

Je suppose que vous utilisez MySQL et InnoDB. Il serait plus rapide, plus facile et plus efficace en termes de ressources/vitesse d’utiliser MySQL contrainte FOREIGN KEY et d’ajouter CASCADE à ON DELETE dans définition de clé étrangère . En bref, toutes les lignes de la table enfant référencées sont supprimées. Cela ne nécessite également aucune modification du fichier de modèle. Vous supprimez uniquement les lignes de la table parent (comme le modèle le fait généralement) et le système de base de données fait le reste. Si vous utilisez MySQL Workbench pour construire votre base de données ici, vous pouvez trouver un endroit où cela peut fonctionner:

enter image description here

Liens utiles:

1
Artur Stępień