2016-05-03 7 views
0

Ich möchte alle Daten aus meiner MySQL-Datenbank exportieren, mit dem folgenden Code:PHP yii2 Datenprovider Totalcount und den Export in Excel erhalten

public function actionExport() 
{ 
return $this->createDatAndRen('export', false); 
} 


private function createDatAndRen($view, $setPagi = true) 
{ 
    $searchModel = new ASearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

    $paginat = new Pagination(['pageSize' => $setPagi ? 50 : $dataProvider->getTotalCount()]); 
    $dataProvider->paginat = $paginat; 

    return $this->render($view, [ 
     'searchModel' => $searchModel, 
     'dpro' => $dataProvider, 
    ]); 
} 

Wenn ich den Export-Knopf klicken bekomme ich diesen Fehler:

SQLSTATE[IMSSP]: Tried to bind parameter number 2101. SQL Server supports a maximum of 2100 parameters.

Mein Problem ist, wenn getTotalCount() = 50 oder 1000 Ich kann alle Ausgaben lesen. Aber wenn ich 3049 Artikel habe, kann ich sie nicht in Excel exportieren.

Irgendwelche Ideen?

Antwort

0

Nach issue#10371:

MSSQL has a hard limit in a number of parameters you can pass to stored procedure. And it looks like Yii2 uses stored procedures to prepare SQL statement.

MySQL und Oracle zu dieser Grenze haben.

Eine Lösung kann sein, diese Grenze zu erhöhen, was nicht empfohlen wird (und ich habe niemanden gefunden, der dies empfiehlt).

Eine andere Lösung ist, wenn Sie die Grenze teilen teilen Sie Ihre Abfrage in einen Block von, sagen wir 2000 Datensätze und führen mehrere Abfragen, um Ihre Daten zu holen.

-1

Bitte beachten Sie dieses Problem https://github.com/yiisoft/yii2/issues/10371

es scheint, dass dies nicht Problem mit MSSQL nur ist, kann dies auch auf Software-Logik in Beziehung gesetzt werden.

Möglicherweise gibt es auch ein Problem mit MSSQL-Treiber.