Yii2: Как кэшировать запросы, сделанные отношениями ActiveRecord

У меня есть таблица новостей и связанная с ней таблица news_comment.
Я определил отношение newsComment с таблицей news_comment.

Если я выполню этот запрос:

$result = News::getDb()->cache(function () use($id) {
return News::find()->with('newsComment')->where(['news.id' => $id])->one();
});

Кэшируется только запрос, извлекающий данные из таблицы новостей. Запрос, который выбирается из связанной таблицы, не является.

Можно ли кэшировать как основной запрос, так и запросы, выполняемые для извлечения данных из связанных таблиц вместе, без необходимости записывать их отдельно?

8

Решение

Попробуй это:

$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;

});
3

Другие решения

Попробуй добавить $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();
1

По вопросам рекламы [email protected]