Удаление дублирующихся записей (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 2168
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()