Как правильно организовать выборку и генерацию древовидной структуры из нескольких таблиц MySQL с разными полями?

Есть 3 таблицы со своими (разными) полями:

country | city | street

Вопрос: Как создать древовидную структуру вложенностей из этих 3 таблиц(например json массив) такого типа:

{
  "country1": {
     "name_country": <name>
     ... другие поля из таблицы country
     "city_array": {
           "city1": {
                "name": <name>,
                ... другие поля из таблицы city           
                "street_array": {
                        "street1": {
                            "namestreet": <name>
                            ... другие поля из таблицу street
                                   }
                                }

На всякий случай публикую как я сделал сейчас:

$country = DB::query('SELECT * FROM `country`');

// массив стран с ключом по id
$country_id = Transform::groupMassBykey($country,'id');

// массив из ключей id стран (что бы вытащить города)
$country_id_array = array_column($country, 'id');

//города
$city = DB::query('
        SELECT * FROM `city` WHERE `idcountry` IN %li', $country_id_array);

 // массив из ключей id городов (что бы вытащить улицы)
 $city_id = Transform::groupMassBykey($city,'id');

 // массив из ключей id улиц
 $city_id_array = array_column($city, 'id');

 //объединить страны и города
 foreach ($city_id as $key => $value) {
            $country_id[$value['idcountry']]['citys_array'][$key] = $value;
        }

 //все улицы к списку стран и городов
 $street= DB::query('
            SELECT `street`.*, `city`.`idcountry` 
            FROM `street` 
            LEFT JOIN `city` ON `city`.`id` = `streеt`.`idcity`
            WHERE `idcity` IN %li', $city_id_array
        );
        
  //объединить улицы и страны + города
  foreach ($street as $value) {
      $country_id[$value['idcountry']]['city_array'][$value['idcity']]['street'][] = $value;
        }

 result $country_id;

Ответы (0 шт):