Add a controller: get duplicate term and associated nodes

A.Define path
File path: custom/custom_core/custom_core.routing.yml

custom_core.node_count_by_vid:
path: '/duplicate/nodes/{vid}'
defaults:
_controller: '\Drupal\custom_core\Controller\NodeCountByVidController::nodeList'
_title: 'Duplicate nodes'
requirements:
_permission: 'administer access'

B. Controller path: custom_core/src/Controller

namespace Drupal\custom_core\Controller;
use Drupal\Core\Controller\ControllerBase;
/**
* Class NodeCountByVidController.
*/
class NodeCountByVidController extends ControllerBase {
/**
* Get the Node count by vocubalary.
*
* @return array
* The build array.
*/
public function nodeList($vid = NULL) {
// Get term id which term exist as duplicate.
$query = \Drupal::database()->select('taxonomy_term_field_data', 'td');
$query->fields('td', ['name']);
$query->condition('td.vid', $vid, '=');
$query->addExpression('GROUP_CONCAT(td.tid)', 'term_id');
$query->groupBy('td.name');
$query->having('COUNT(name) >= :matches', [':matches' => 2]);
$results = $query->execute();
$rows = $results->fetchAll();
$terms = '';
foreach ($rows as $row) {
$terms .= $row->term_id . ',';
}
$terms = rtrim($terms, ',');
$term_ids = explode(',', $terms);
$query = \Drupal::database()->select('taxonomy_index', 'ti');
$query->leftJoin('taxonomy_term_field_data', 'td', 'ti.tid = td.tid');
$query->fields('ti', ['tid']);
$query->fields('td', ['name']);
$query->addExpression('GROUP_CONCAT(ti.nid)', 'node_id');
$query->condition('ti.tid', $term_ids, 'IN');
$query->groupBy('td.name, ti.tid');
$result = $query->execute()->fetchAll();
$header = ['#', 'Term Name', 'Term ID', 'Node ID'];
$output[] = [
'#theme' => 'table',
'#header' => $header,
];
$data = [];
$counter = 1;
foreach ($result as $row) {
$data[] = [
$counter,
$row->name,
$row->tid,
$row->node_id,
];
$counter++;
}
$output = [
'#theme' => 'table',
'#header' => $header,
'#rows' => $data,
];
return $output;
}
}

Leave a comment