У меня есть таблица новостей и связанная с ней таблица news_comment.
Я определил отношение newsComment с таблицей news_comment.
Если я выполню этот запрос:
$result = News::getDb()->cache(function () use($id) {
return News::find()->with('newsComment')->where(['news.id' => $id])->one();
});
Кэшируется только запрос, извлекающий данные из таблицы новостей. Запрос, который выбирается из связанной таблицы, не является.
Можно ли кэшировать как основной запрос, так и запросы, выполняемые для извлечения данных из связанных таблиц вместе, без необходимости записывать их отдельно?
Попробуй это:
$db = News::getDb();
$result = $db->cache(function ($db) use ($id) {
$query = new \yii\db\Query;
$query->select("news.*,newsComment.*") // write table name for newsComment model and also in join
->from('news')
->leftjoin('newsComment','newsComment.id=news.product_id')
->where(['news.id' => $id])
->one();
$command = $query->createCommand();
$result = $command->queryAll();
return $result;
});
Попробуй добавить $db
или же Yii::$db
в качестве параметра:
$result = News::getDb()->cache(function ($db) {
return News::find()->with('newsComment')->where(['news.id' => $id])->one();
});
Или добавьте кеш в сам запрос:
$result = News::find()->with('newsComment')->where(['news.id' => $id])->cache(60)->one();