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 −という関数を作成します actionDataProvider 中 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);
}
上記のコードでは、のインスタンスを定義します 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データプロバイダーやアクティブデータプロバイダーとは異なり、配列データプロバイダーはすべてのデータをメモリにロードするため、効率が低下することに注意してください。