Получить идентификатор удаленной записи базы данных

Я хотел бы создать метод delete, который удаляет запись в таблице И прикрепленные записи во второй таблице.

Это мой источник:

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

Возможно ли это?

2 голоса | спросил MyFault 10 J000000Friday15 2015, 13:36:03

2 ответа


0

Вот пример того, как ваш запрос будет работать

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

Вы увидите, что я использовал $query->clear();, который очищает данные от запроса.

Затем просто используется $userid для обоих запросов.

ответил Lodder 10 J000000Friday15 2015, 13:59:05
1

Я предполагаю, что вы используете MySQL и InnoDB. Было бы быстрее, проще и ресурсоемкой /быстродействующей использовать MySQL FOREIGN KEY и добавьте CASCADE в ON DELETE в определение внешнего ключа . Короче говоря, это приведет к удалению всех дочерних табличных строк, которые ссылаются на строки родительских таблиц, которые удалены. Это также не требует изменений в файле модели. Вы удаляете только родительские строки таблицы (как обычно это делает модель), а система базы данных - все остальное. Если вы используете MySQL Workbench для создания своей базы данных здесь, вы можете найти место, где вы можете выполнить эту работу:

введите описание изображения здесь

Полезные ссылки:

ответил Artur Stępień 13 J000000Monday15 2015, 02:36:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132