In meinem PostSearch Modell habe ich diesen Code:Yii2: Wie aktiver Datenanbieter im Cache?
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;
meinen Versuch, statt über die Linie return $dataProvider
, dieser Block von Code wäre:
$dependency = [
'class' => 'yii\caching\DbDependency',
'sql' => 'SELECT MAX(updated_at) FROM post',
];
$result = self::getDb()->cache(function ($db) {
return $dataProvider;
}, 3600, $dependency);
return $result
Ich kehrt um das Ergebnis cachen möchte ADP, basierend auf dem Feld updated_at. Ich meine, ich möchte Daten aus dem Cache liefern, bis etwas geändert wird. Mein Code funktioniert nicht, ich meine, Caching wird überhaupt nicht angewendet. Was mache ich falsch, und ist es möglich, dies auf ADP zu tun? Danke
Danke, Lösung mit Prepare() funktioniert, aber ich verstehe Ihren zweiten Code nicht sehr gut. Was ist -> allModels und $ postActiveQuery? Danke noch einmal. – offline
Eigentlich war nur '$ query' genug. Es ist das gleiche Prinzip wie das erste Stück, aber stattdessen holen wir alle Datensätze und speichern sie in einem 'ArrayDataProvider'. Der Unterschied besteht darin, dass die tatsächlichen Modelle/Attribute jetzt im Anwendungscache zwischengespeichert werden und nicht mehr die Ergebnisse der Abfrage. Aber wenn der erste funktioniert, würde ich bei diesem bleiben :) – Blizz
@Blizz Ich testete Ihre erste Lösung, die '' '' 'Abfrage 'zwischenspeichert, aber nicht' count' Abfrage von DataProvider. Wie kann ich dies beheben, um sowohl die Auswahl als auch die Anzahl der Warteschlangen zwischenzuspeichern? Ich benutze 'SqlDataProvider'. – hamed