Warning: Use of undefined constant videoembedder_options - assumed 'videoembedder_options' (this will throw an Error in a future version of PHP) in /home/devintru22/data/www/devint.ru/wp-content/plugins/video-embedder/video-embedder.php on line 306
// https://github.com/yiisoft/yii2/blob/34aeb019e51978f8f9982d9dd8bd3ed8798e7217/docs/guide-ru/db-active-record.md class Customer extends \yii\db\ActiveRecord { /** * Объявляет виртуальное свойство для агрегируемых данных, доступное только на чтение. */ public function getOrdersCount() { if ($this->isNewRecord) { return null; // нет смысла выполнять запрос на поиск по пустым ключам } return $this->ordersAggregation[0]['counted']; } /** * Объявляет обычное отношение 'orders'. */ public function getOrders() { return $this->hasMany(Order::className(), ['customer_id' => 'id']); } /** * Объявляет новое отношение, основанное на 'orders', которое предоставляет агрегацию. */ public function getOrdersAggregation() { return $this->getOrders() ->select(['customer_id', 'counted' => 'count(*)']) ->groupBy('customer_id') ->asArray(true); } // ... } foreach (Customer::find()->with('ordersAggregation')->all() as $customer) { echo $customer->ordersCount; // выводит агрегируемые данные из отношения без дополнительного запроса благодаря жадной загрузке } $customer = Customer::findOne($pk); $customer->ordersCount; // выводит агрегируемые данные отношения через ленивую загрузку