Yii - Fornitori di dati
Yii fornisce una serie di classi di provider di dati che incapsulano l'impaginazione e l'ordinamento. Un fornitore di dati implementa yii \ data \ DataProviderInterface. Supporta il recupero di dati ordinati e impaginati. I fornitori di dati di solito lavorano con i widget di dati.
Yii include -
ActiveDataProvider - Utilizza yii\db\ActiveQuery o yii\db\Query per eseguire query sui dati dai database.
SqlDataProvider - Esegue SQL e restituisce i dati come array.
ArrayDataProvider - Prende una grande matrice e ne restituisce una parte.
Definisci i comportamenti di ordinamento e impaginazione di un fornitore di dati configurandone i file pagination e sortproprietà. Widget di dati, comeyii\grid\GridView, hanno una proprietà chiamata dataProvider, che accetta un'istanza del fornitore di dati e visualizza i dati sullo schermo.
Preparazione del DB
Step 1- Crea un nuovo database. Il database può essere preparato nei due modi seguenti.
Nel terminale eseguire mysql -u root –p .
Crea un nuovo database tramite CREATE DATABASE helloworld SET DI CARATTERI utf8 COLLATE utf8_general_ci;
Step 2 - Configurare la connessione al database in config/db.phpfile. La seguente configurazione è per il sistema attualmente utilizzato.
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host = localhost;dbname = helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];
?>
Step 3 - All'interno della cartella principale run ./yii migrate/create test_table. Questo comando creerà una migrazione del database per la gestione del nostro DB. Il file di migrazione dovrebbe apparire nel filemigrations cartella della radice del progetto.
Step 4 - Modifica il file di migrazione (m160106_163154_test_table.php in questo caso) in questo modo.
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160106_163154_test_table extends Migration {
public function safeUp() {
$this->createTable("user", [ "id" => Schema::TYPE_PK, "name" => Schema::TYPE_STRING, "email" => Schema::TYPE_STRING, ]); $this->batchInsert("user", ["name", "email"], [
["User1", "[email protected]"],
["User2", "[email protected]"],
["User3", "[email protected]"],
["User4", "[email protected]"],
["User5", "[email protected]"],
["User6", "[email protected]"],
["User7", "[email protected]"],
["User8", "[email protected]"],
["User9", "[email protected]"],
["User10", "[email protected]"],
["User11", "[email protected]"],
]);
}
public function safeDown() {
$this->dropTable('user');
}
}
?>
La migrazione di cui sopra crea un file usertabella con questi campi: id, nome ed email. Aggiunge anche alcuni utenti demo.
Step 5 - All'interno della radice del progetto run ./yii migrate per applicare la migrazione al database.
Step 6 - Ora, dobbiamo creare un modello per il nostro usertavolo. Per motivi di semplicità, utilizzeremo ilGiistrumento di generazione del codice. Apri questourl: http://localhost:8080/index.php?r=gii. Quindi, fare clic sul pulsante "Start" sotto l'intestazione "Generatore di modelli". Compilare il nome della tabella ("utente") e la classe del modello ("MyUser"), fare clic sul pulsante "Anteprima" e infine fare clic sul pulsante "Genera".
Il modello MyUser dovrebbe apparire nella directory dei modelli.
Fornitore attivo di dati
Step 1 - Crea una funzione chiamata actionDataProvider dentro il SiteController.
public function actionDataProvider(){
$query = MyUser::find();
$provider = new ActiveDataProvider([ 'query' => $query,
'pagination' => [
'pageSize' => 2,
],
]);
// returns an array of users objects
$users = $provider->getModels();
var_dump($users);
}
Nel codice sopra, definiamo un'istanza di ActiveDataProviderclass e visualizzare gli utenti dalla prima pagina. Ilyii\data\ActiveDataProvider class utilizza il componente dell'applicazione DB come connessione DB.
Step 2 - Se inserisci l'indirizzo dell'host locale http://localhost:8080/index.php?r=site/dataprovider, vedrai il seguente output.
Provider di dati SQL
Il yii\data\SqlDataProvider class funziona con istruzioni SQL non elaborate.
Step 1 - Modifica il file actionDataProvider metodo in questo modo.
public function actionDataProvider() {
$count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user')->queryScalar(); $provider = new SqlDataProvider([
'sql' => 'SELECT * FROM user',
'totalCount' => $count, 'pagination' => [ 'pageSize' => 5, ], 'sort' => [ 'attributes' => [ 'id', 'name', 'email', ], ], ]); // returns an array of data rows $users = $provider->getModels(); var_dump($users);
}
Step 2 - Tipo http://localhost:8080/index.php?r=site/data-provider nella barra degli indirizzi del browser web, vedrai il seguente output.
Provider di dati array
Il yii\data\ArrayDataProviderclass è la migliore per lavorare con grandi array. Gli elementi in questa matrice possono essere risultati di query di istanze DAO o Active Record.
Step 1 - Modifica il file actionDataProvider metodo in questo modo.
public function actionDataProvider() {
$data = MyUser::find()->asArray()->all(); $provider = new ArrayDataProvider([
'allModels' => $data, 'pagination' => [ 'pageSize' => 3, ], 'sort' => [ 'attributes' => ['id', 'name'], ], ]); // get the rows in the currently requested page $users = $provider->getModels(); var_dump($users);
}
Step 2 - Se vai all'indirizzo http://localhost:8080/index.php?r=site/data-provider attraverso il browser web, vedrai il seguente output.
Si noti che, a differenza di SQL Data Provider e Active Data Provider, Array Data Provider carica tutti i dati nella memoria, quindi è meno efficiente.