sidorenkoda
@sidorenkoda
Программист, верстальщик, руководитель проектов

Как настроить кеширование Yii2 при использовании только yii\db\Connection?

Использую не весь Yii2 а только yii\db\Connection, а следовательно все связи, в нем указанные.
cache(3600) должен кешировать запрос на час, но всегда выводит актуальные данные из базы данных (я их изменяю вручную для теста)
Вот PHP код:
<?php
define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'dev');
require(__DIR__ . './core/classes/Yii2/Yii.php');
$connection = new yii\db\Connection([
'dsn' => 'mysql:host=localhost;dbname=tt',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);
$connection->open();
$q = "SELECT * FROM yii_categories_types";
$a = $connection->createCommand($q)->cache(3600)->queryAll();
print_r($a);
?>
/*
Работает и выводит:
0 => [id_category_type=>1, name=>Название ],[...],[...]...
*/

Но если я использую кеширование в стандартной модели Yii2 (наследуемой от \yii\db\ActiveRecord) то все хорошо работает.
Yii2 позиционируется как framework, классы которого можно использовать отдельно в различных проектах.
Подскажите пожалуйста как мне достигнуть кеширования, может я какой параметр в конфиге упустил важный?

Благодарю за уделенное время и внимание!
  • Вопрос задан
  • 10393 просмотра
Решения вопроса 1
само кэширование-то вы не настроили.
Yii::createObject('cache',[
'class' => ...,
....
]);


UPD:

<?php

define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require_once __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php';

$container = new \yii\di\Container;

$container->set('cache', [
    'class' => 'yii\caching\FileCache',
    'cachePath' => $_SERVER['DOCUMENT_ROOT'] . '/cache/',
    'cacheFileSuffix' => '.xxx',
]);
$cache = $container->get('cache');

$container->set('connection', [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=yii2-app',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
    'queryCache' => $cache
]);

$connection = $container->get('connection');
$connection->open();
$q = "SELECT * FROM user_user";
$a = $connection->createCommand($q)->cache(45)->queryAll();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Ekstazi
Все дело только в DI, я уже говорил вчера об этом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы