Как получить вложенные данные Yii2?

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

1. Использование моделей ActiveRecord:
Если вложенные данные хранятся в таблицах базы данных, можно использовать модели ActiveRecord и отношения между моделями для получения этих данных. Например, если у вас есть модель User, у которой есть отношение hasMany с моделью Order, чтобы получить все заказы, связанные с определенным пользователем, можно использовать следующий код:

   $user = User::findOne($userId);
   $orders = $user->orders;

Если вы хотите получить более сложные вложенные данные, например, все товары, связанные с заказами пользователя, вы можете использовать дополнительные отношения:

   // В модели User
   public function getProducts()
   {
       return $this->hasMany(Product::class, ['order_id' => 'id'])
           ->via('orders');
   }

   $user = User::findOne($userId);
   $products = $user->products;

2. Использование связей "жадной загрузки":
Если вам необходимо получить вложенные данные для нескольких записей сразу, чтобы избежать проблемы "N+1 запросов", вы можете использовать связи "жадной загрузки". Например, для получения всех пользователей вместе с их заказами и продуктами, можно использовать:

   $users = User::find()
       ->with('orders.products')
       ->all();

Результатом будет массив моделей User, в котором каждая модель будет содержать связанные данные заказов и продуктов.

3. Использование объектов запросов:
Если вложенные данные не связаны с базой данных или вы хотите получить данные без использования моделей ActiveRecord, можно воспользоваться объектами запросов Yii2. Например, чтобы получить список всех пользователей и их заказов из внешнего API, можно использовать следующий код:

   $query = new Query();
   $users = $query
       ->from('users')
       ->all();

   foreach ($users as &$user) {
       $orders = $query
           ->from('orders')
           ->where(['user_id' => $user['id']])
           ->all();

       $user['orders'] = $orders;
   }

В этом примере мы используем объект запроса Query, чтобы выполнить запрос к таблице "users" и получить массив пользователей. Затем для каждого пользователя мы выполняем дополнительный запрос к таблице "orders" и получаем все заказы, связанные с этим пользователем. Наконец, мы добавляем массив заказов к каждой записи пользователя в исходном массиве.

Вот несколько способов получения вложенных данных в Yii2. Выберите наиболее подходящий вариант для вашего случая в зависимости от типа данных и требований проекта.