beginTransaction(yii\db\Transaction::REPEATABLE_READ); try { $db->createCommand('SET TRANSACTION READ ONLY')->execute(); $db->createCommand("SET LOCAL statement_timeout = '5s'")->execute(); $groups = []; foreach (['degr' => 'degr_groups', 'tp' => 'tarif_groups', 'cons' => 'consent_groups'] as $marker => $table) { $query = (new yii\db\Query())->select(['number', 'name']) ->from('{{%' . $table . '}}')->where(['between', 'number', 1, 9])->orderBy(['number' => SORT_ASC]); if ($marker !== 'degr') { $query->andWhere(['deleted_at' => null]); } $groups[$marker] = array_map(static fn(array $row): array => [ 'number' => (int) $row['number'], 'name' => (string) $row['name'], ], $query->all($db)); } $transaction->commit(); echo json_encode(['host' => 'zoomzilla.ru', 'generated_at' => gmdate(DATE_ATOM), 'groups' => $groups], JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), "\n"; } catch (Throwable $exception) { if ($transaction->isActive) { $transaction->rollBack(); } // Сообщения PDO могут содержать DSN: наружу только безопасный результат. fwrite(STDERR, "Каталог групп не обновлён.\n"); exit(1); }