Nel mio modello PostSearch ho questo codice:Yii2: come memorizzare nella cache il fornitore di dati attivo?
public function search($params)
{
$query = Post::find()->where(['status' => 1]);
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['id' => SORT_DESC]],
'pagination' => [
'pageSize' => 10,
]
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->andFilterWhere([
'id' => $this->id,
'status' => $this->status,
]);
$query->andFilterWhere(['like', 'title', $this->title])
->andFilterWhere(['like', 'text', $this->text]);
return $dataProvider;
il mio tentativo, invece di sopra della linea return $dataProvider
, sarebbe questo blocco di codice:
$dependency = [
'class' => 'yii\caching\DbDependency',
'sql' => 'SELECT MAX(updated_at) FROM post',
];
$result = self::getDb()->cache(function ($db) {
return $dataProvider;
}, 3600, $dependency);
return $result
Vorrei mettere in cache il risultato restituito da ADP, basato sul campo updated_at. Voglio dire, voglio servire i dati dalla cache fino a quando non vengono apportate alcune modifiche. Il mio codice non funziona, voglio dire che il caching non viene applicato affatto. Cosa sto facendo male, ed è possibile farlo su ADP? Grazie
Grazie, la soluzione con prepare() funziona, ma non capisco molto bene il tuo secondo codice. Cosa sono -> allModels e $ postActiveQuery? Grazie ancora. – offline
In realtà era sufficiente '$ query'. È lo stesso principio del primo pezzo, ma recuperiamo tutti i record e li memorizziamo in un 'ArrayDataProvider'. La differenza è che ora i modelli/gli attributi effettivi vengono memorizzati nella cache dell'applicazione invece dei risultati della query. Ma se il primo funziona, vorrei attenermi a quello :) – Blizz
@Blizz Ho provato la tua prima soluzione, quella cache 'select' query, ma non memorizza nella cache la query' count' di dataProvider. Come posso risolvere questo problema per memorizzare nella cache sia le coppie di selezione che quelle di conteggio? Sto usando 'SqlDataProvider'. – hamed