Как найти в таблице 2 одинаковые записи в промежуточной таблице. Yii2?

Для поиска одинаковых записей в промежуточной таблице в Yii2, вы можете воспользоваться различными методами ActiveRecord и QueryBuilder.

Если у вас есть две модели, связанные промежуточной таблицей, и вы хотите найти все записи, которые имеют одинаковые значения определенного атрибута в этой таблице, вы можете использовать метод joinWith() и andWhere() для построения SQL-запроса:

$duplicates = Model1::find()
    ->joinWith('relationName')
    ->andWhere(['=', 'intermediateTable.columnName', $value])
    ->groupBy('intermediateTable.columnName')
    ->having('COUNT(intermediateTable.columnName) > 1')
    ->all();

В этом примере 'relationName' - имя отношения между вашими моделями, который определен с помощью hasMany() или hasOne() в классе Model1.

Здесь мы сначала присоединяем связанные модели с помощью joinWith(), затем фильтруем записи с условием 'intermediateTable.columnName' = $value. После этого мы группируем записи по этому полю и выбираем только те группы, у которых количество записей больше 1.

Если вам необходимо найти все дубликаты в промежуточной таблице, не привязываясь к какому-либо значению атрибута, вы можете воспользоваться методом groupBy() без аргументов:

$duplicates = Model1::find()
    ->joinWith('relationName')
    ->groupBy('intermediateTable.columnName')
    ->having('COUNT(intermediateTable.columnName) > 1')
    ->all();

Здесь мы группируем все записи в промежуточной таблице и выбираем только те группы, у которых количество записей больше 1.

Оба этих способа используют построитель запросов QueryBuilder в Yii2, который предлагает множество методов для создания более сложных запросов к базе данных. Вы можете использовать эти методы для нахождения и фильтрации данных в таблице по различным правилам или условиям.