Вот таким образом это у меня происходит:
Таблица - Фильм (movie)
Таблица - Жанр (genre)
Связная таблица movie_genre^
movieID
genreID
ord
Связи остаются как есть после генерации через gii.
Вот таки образом получаю данные с сортировкой (модель в данном случае - это сущность Фильм)
Код: Выделить всё
$genres = new \yii\data\ActiveDataProvider(['query' => $model->getMovieGenres()->with('genre')->orderBy('ord'), 'sort' => false,]);
Дебагер никаких лишних запросов не показывает, все как и должно быть при таком подходе, когда он выдергивает ключи для IN, только подставляет туда ORDER BY
Код: Выделить всё
SELECT * FROM `movie_genre` WHERE `movieID`=1 ORDER BY `ord` LIMIT 20
Соответственно это провайдер загоняем уже в грид.
Как-то так.