Возникла задача выстроить города в древовидную структуру. Я вижу 3 варианта сделать это
Массивы
$counties = Country::find()->asArray()->all();
$districts = District::find()->asArray()->all();
foreach (City::find()->all() as $city) {
$cities [$this->getCountryName($counties, $city->country_id)]
... [districts][regions] ...
}
Объекты AR
foreach (City::find()->all() as $city) {
$counties = Country::findOne($city->country_id);
$region = Region::findOne($city->region_id);
$cities [$county->name] //forming array
... [$region->name][regions] ...
}
Использовать DataProvider
$counties = new ActiveDataProvider(['query'=> Country::find()])
$districts = new ActiveDataProvider(['query'=> District::find()])
foreach (City::find()->all() as $city) {
$cities [$counties->query-select(...)]
... [$counties->query-select(...)] ...
}
Я сейчас реализовал 2м способом, объектами AR, но страничка долго грузится, для всего 3500 городов. С массивами тоже пробовал, тоже грузилась долго (все тесты на локалхосте)