Yii-データプロバイダー

Yiiは、ページ付けと並べ替えをカプセル化するデータプロバイダークラスのセットを提供します。データプロバイダーはyii \ data \ DataProviderInterfaceを実装します。ソートおよびページ付けされたデータの取得をサポートします。データプロバイダーは通常、データウィジェットを操作します。

Yiiには-が含まれます

  • ActiveDataProvider −用途 yii\db\ActiveQuery または yii\db\Query データベースからデータをクエリします。

  • SqlDataProvider − SQLを実行し、データを配列として返します。

  • ArrayDataProvider −大きな配列を取り、そのスライスを返します。

データプロバイダーを構成することにより、データプロバイダーの並べ替えとページ付けの動作を定義します。 pagination そして sortプロパティ。などのデータウィジェットyii\grid\GridView、というプロパティがあります dataProvider、データプロバイダーインスタンスを取得し、画面にデータを表示します。

DBの準備

Step 1−新しいデータベースを作成します。データベースは以下の2つの方法で作成できます。

  • ターミナルでmysql-u root –pを実行します。

  • を介して新しいデータベースを作成します CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci;

Step 2 −でデータベース接続を構成します config/db.phpファイル。次の構成は、現在使用されているシステム用です。

<?php
   return [
      'class' => 'yii\db\Connection',
      'dsn' => 'mysql:host = localhost;dbname = helloworld',
      'username' => 'vladimir',
      'password' => '12345',
      'charset' => 'utf8',
   ];
?>

Step 3 −ルートフォルダ内 run ./yii migrate/create test_table。このコマンドは、DBを管理するためのデータベース移行を作成します。移行ファイルはに表示されますmigrations プロジェクトルートのフォルダ。

Step 4 −移行ファイルを変更します(m160106_163154_test_table.php この場合)このように。

<?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');
      }
   }
?>

上記の移行により、 user次のフィールドを持つテーブル:id、name、およびemail。また、いくつかのデモユーザーを追加します。

Step 5 −プロジェクトルート内 run ./yii migrate 移行をデータベースに適用します。

Step 6 −次に、モデルを作成する必要があります。 userテーブル。簡単にするために、Giiコード生成ツール。これを開くurl: http://localhost:8080/index.php?r=gii。次に、「モデルジェネレータ」ヘッダーの下にある「開始」ボタンをクリックします。テーブル名(「ユーザー」)とモデルクラス(「MyUser」)を入力し、「プレビュー」ボタンをクリックして、最後に「生成」ボタンをクリックします。

MyUserモデルがmodelsディレクトリに表示されます。

アクティブデータプロバイダー

Step 1 −という関数を作成します actionDataProviderSiteController

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);
}

上記のコードでは、のインスタンスを定義します ActiveDataProvider最初のページからユーザーをクラス分けして表示します。ザ・yii\data\ActiveDataProvider クラスは、DBアプリケーションコンポーネントをDB接続として使用します。

Step 2 −ローカルホストアドレスを入力した場合 http://localhost:8080/index.php?r=site/dataprovider、次の出力が表示されます。

SQLデータプロバイダー

ザ・ yii\data\SqlDataProvider クラスは生のSQLステートメントで動作します。

Step 1 −を変更します actionDataProvider この方法。

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 −タイプ http://localhost:8080/index.php?r=site/data-provider Webブラウザのアドレスバーに次の出力が表示されます。

アレイデータプロバイダー

ザ・ yii\data\ArrayDataProviderクラスは、大きな配列を操作するのに最適です。この配列の要素は、DAOまたはActiveRecordインスタンスのクエリ結果のいずれかです。

Step 1 −を変更します actionDataProvider この方法。

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 −あなたがその住所に行くなら http://localhost:8080/index.php?r=site/data-provider Webブラウザーを介して、次の出力が表示されます。

SQLデータプロバイダーやアクティブデータプロバイダーとは異なり、配列データプロバイダーはすべてのデータをメモリにロードするため、効率が低下することに注意してください。