Может кэшироваться запрос к базе данных?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
rotting
Сообщения: 74
Зарегистрирован: 2016.07.28, 15:50

Может кэшироваться запрос к базе данных?

Сообщение rotting »

Есть B2B портал, с учетной системы напрямую в базу данных пишутся остатки товаров, иногда пользователи жалуются на то, что остатки не актуальны, пока не обновишь страницу.
Могут ли кэшироваться запросы Yii2 к базе данных, если да, то как отключить?
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Может кэшироваться запрос к базе данных?

Сообщение unknownby »

При чем тут кэширование запроса к обновлению страницы?
Для того, чтобы узнать сколько осталось "остатков товаров" актуальное число, нужно обновить страницу. Чтобы запрос выполнился и показал актуальное состояние. При переходе с одной страницы на другую запрос по остаткам товаров, если это страница просмотра всего содержимого, где есть остатки товаров, будет обновляться сам.
Можно чуть больше конкретики по задаче?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Может кэшироваться запрос к базе данных?

Сообщение ElisDN »

Подключите WebSocket-уведомления, чтобы на странице обновлялись без перезагрузки.
rotting
Сообщения: 74
Зарегистрирован: 2016.07.28, 15:50

Re: Может кэшироваться запрос к базе данных?

Сообщение rotting »

Видимо не так описал то, что происходит. Остатки отображаються не правильные, не те что в базе данных:
- в 12:00 был остаток 10 шт
- в 13:00 продали 2 шт
- в 14:00 пользователь заходит на портал и видит 10 шт, нажал ctrl+F5 и остатки показались правильные - 8 шт.
rotting
Сообщения: 74
Зарегистрирован: 2016.07.28, 15:50

Re: Может кэшироваться запрос к базе данных?

Сообщение rotting »

Нашел решение, было так:

Код: Выделить всё

$productStock = self::hasMany(ProductStock::className(), ['product_id' => 'id'])
            ->andWhere(['enabled' => 1])
            ->andFilterWhere(['store_id' => $store_map]);
Добавил noCache() :

Код: Выделить всё

$productStock = self::hasMany(ProductStock::className(), ['product_id' => 'id'])
            ->andWhere(['enabled' => 1])
            ->andFilterWhere(['store_id' => $store_map])->noCache();
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Может кэшироваться запрос к базе данных?

Сообщение unknownby »

rotting писал(а): 2020.11.30, 20:21 Нашел решение
Это хорошо, но стоит проверить, возможно где-то есть в проекте кэширование запроса.
Вопрос просто в том, что зачем кэшировать, а потом указывать чтобы этот запрос не кэшировался?
Ответить