2016-12-30 1 views
0

Ich habe eine Abfrage mit kartik-v/export verwendet, um alle Ergebnisse nach Excel zu exportieren, die eine große Menge an Ergebnissen zurückgibt und verursacht, dass der Server nicht genügend Arbeitsspeicher hat.Yii2 Batch-Abfrage für ActiveDataProvider

Hier ist ein Beispiel Abfrage:

$query = Customer::find()->where('status'=>1); 
$activeDataProvider = new ActiveDataProvider(['query'=>$query]) ; 
return $activeDataProvider; 

Wie kann ich das richtig drehen in eine Batch-Abfrage? Oder gibt es eine andere Möglichkeit, Speicherlecks zu verhindern?

+0

Datenprovider verwenden gibt Ihnen Ergebnis ausgelagert - sind Sie in diesem Fall aus dem Speicher ausgeführt wird? Oder ist das Beispiel, das Sie angegeben haben, so vereinfacht, dass es Ihrer Anfrage nicht einmal nahe kommt? – Bizley

+0

@bizley Ich hätte klarer sein müssen. Alle Ergebnisse von activeDataProvider werden in eine Excel-Datei exportiert. Grundsätzlich kann ein Benutzer alle seine Ergebnisse exportieren. – Dean

+0

Sehen Sie diese Demo http://demos.krajee.com/export-demo-dtl/large-files-link Dort gibt es eine Option für große Datei- und Speicherprobleme. – Bizley

Antwort

0

könnten Sie versuchen, eine Batch-Abfrage http://www.yiiframework.com/doc-2.0/guide-db-active-record.html

// fetch 10 customers at a time 
    foreach (Customer::find()->batch(10) as $customers) { 
    // $customers is an array of 10 or fewer Customer objects 
} 
+0

Ich muss ActiveDataProvider verwenden, da ich die Ergebnisse mit dem Kartik Export Plugin nach CSV exportiert habe – Dean

Verwandte Themen