Hatysik
@Hatysik

Yii2 не кеширует целиком дополнительные запросы — что делать?

Включаю кеширование:
return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=mysql;dbname=my',
    'username' => 'root',
    'password' => 'pass',
    'charset' => 'utf8',

    // включение кэширование схемы БД
    'enableSchemaCache' => true,
];


До включения 74 запроса. после - 70. Из них 20 это SHOW... и 20 SELECT kcu.constraint_name, kcu.column_name,...

Права на запись для файлов кеша выставлены - debug панель Yii2 в Log ошибки про запись не выводит.

На всякий случай уже в конфиг БД писала
// Так
'schemaCacheDuration' => 0,
'schemaCache' => 'cache',

//и так тоже
'schemaCacheDuration' => 3600,


Компонент кеша тоже подключен
'cache' => [
      'class' => 'yii\caching\FileCache',
],
  • Вопрос задан
  • 402 просмотра
Решения вопроса 1
Hatysik
@Hatysik Автор вопроса
В итоге оказалось, что, если владелец папки для кеша не www-data, то не кешируются запросы

Лечение:
1. Изменить владельца папки для кеша
chown www-data:www-data cache
2. Из директории cache всё удалить.
rm -rf ./*
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Я думаю, что для решения Вашей задачи надо использовать отложенную и жадную загрузку.

Есть две таблицы "customer" и "orders", который связаны между собой
class Customer extends ActiveRecord
{
    public function getOrders()
    {
        return $this->hasMany(Order::className(), ['customer_id' => 'id']);
    }
}

class Order extends ActiveRecord
{
    public function getCustomer()
    {
        return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
    }
}

Такой код должен сократить количество обращений к БД.

$customers = Customer::find()
    ->with('orders')
    ->all();
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы