Удаление дублирующихся записей (MODX REVOLUTION)

Удалить вся связанные записи вместе с основной записью по уникальному id

$limit = 10000;
        if ($this->modx->loadClass($classKey)) {

            $sql = "SELECT id,{$key}, COUNT({$key}) FROM {$this->modx->getTableName($classKey)} GROUP BY {$key} HAVING COUNT({$key}) > 1 LIMIT {$limit}";
            $statement = $this->modx->query($sql);
            $contracts = $statement->fetchAll(PDO::FETCH_ASSOC);
            $ids = array_column($contracts,'id');

            $ids = implode(',', $ids);
            $sql = array();

            $sql[] = "DELETE FROM {$this->modx->getTableName($classKey)} WHERE id IN ({$ids});";

            // Получаем все композитные связи основной таблицы
            $dep = $this->modx->getComposites($classKey);
            foreach ($dep as $Alias => $meta) {
                $class = $meta['class'];
                $foreign = $meta['foreign'];
                $sql[] = "DELETE FROM {$this->modx->getTableName($class)} WHERE {$foreign} IN ({$ids});";
            }
            $sql = implode(PHP_EOL,$sql);

            ##print_r($sql);  die;
            $result = $this->modx->exec($sql);

            $count = count($contracts);
            $this->modx->log(modX::LOG_LEVEL_ERROR, "Найдено: {$count}");
        }
30 марта 2018, 15:19    145



Наверх