code: public function cache(callable $callable, $duration = null, $dependency = null)
      {
          $this->_queryCacheInfo[] = [$duration === null ? $this->queryCacheDuration : $duration, $dependency];
          try {
              $result = call_user_func($callable, $this);
              array_pop($this->_queryCacheInfo);
              return $result;
          } catch (\Exception $e) {
              array_pop($this->_queryCacheInfo);
              throw $e;
          } catch (\Throwable $e) {
              array_pop($this->_queryCacheInfo);
              throw $e;
          }
      }
docs: Uses query cache for the queries performed with the callable.
  
  When query caching is enabled ([[enableQueryCache]] is true and [[queryCache]] refers to a valid cache),
  queries performed within the callable will be cached and their results will be fetched from cache if available.
  For example,
  
  ```php
  // The customer will be fetched from cache if available.
  // If not, the query will be made against DB and cached for use next time.
  $customer = $db->cache(function (Connection $db) {
  return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne();
  });
  ```
  
  Note that query cache is only meaningful for queries that return results. For queries performed with
  [[Command::execute()]], query cache will not be used.
  
  @param callable $callable a PHP callable that contains DB queries which will make use of query cache.
  The signature of the callable is `function (Connection $db)`.
  @param int $duration the number of seconds that query results can remain valid in the cache. If this is
  not set, the value of [[queryCacheDuration]] will be used instead.
  Use 0 to indicate that the cached data will never expire.
  @param \yii\caching\Dependency $dependency the cache dependency associated with the cached query results.
  @return mixed the return result of the callable
  @throws \Exception|\Throwable if there is any exception during query
  @see enableQueryCache
  @see queryCache
  @see noCache()