Yii - Penyedia Data
Yii menyediakan satu set kelas penyedia data yang merangkum paginasi dan pengurutan. Penyedia data mengimplementasikan yii \ data \ DataProviderInterface. Ini mendukung pengambilan data yang diurutkan dan diberi nomor halaman. Penyedia data biasanya bekerja dengan widget data.
Yii termasuk -
ActiveDataProvider - Kegunaan yii\db\ActiveQuery atau yii\db\Query untuk menanyakan data dari database.
SqlDataProvider - Menjalankan SQL dan mengembalikan data sebagai array.
ArrayDataProvider - Mengambil array besar dan mengembalikan sebagian darinya.
Anda menentukan perilaku pengurutan dan pagination dari penyedia data dengan mengonfigurasi pagination dan sortproperti. Widget data, sepertiyii\grid\GridView, memiliki properti bernama dataProvider, yang mengambil contoh penyedia data dan menampilkan data di layar.
Mempersiapkan DB
Step 1- Buat database baru. Basis data dapat disiapkan dengan dua cara berikut.
Di terminal, jalankan mysql -u root –p .
Buat database baru melalui CREATE DATABASE SET KARAKTER helloworld utf8 BERHUBUNGAN utf8_general_ci;
Step 2 - Konfigurasi koneksi database di config/db.phpmengajukan. Konfigurasi berikut adalah untuk sistem yang digunakan saat ini.
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host = localhost;dbname = helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];
?>
Step 3 - Di dalam folder root run ./yii migrate/create test_table. Perintah ini akan membuat migrasi database untuk mengelola DB kita. File migrasi akan muncul dimigrations folder dari root proyek.
Step 4 - Ubah file migrasi (m160106_163154_test_table.php dalam kasus ini) dengan cara ini.
<?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');
}
}
?>
Migrasi di atas menciptakan usertabel dengan bidang ini: id, nama, dan email. Itu juga menambahkan beberapa pengguna demo.
Step 5 - Di dalam akar proyek run ./yii migrate untuk menerapkan migrasi ke database.
Step 6 - Sekarang, kita perlu membuat model untuk file usermeja. Demi kesederhanaan, kami akan menggunakan fileGiialat pembuat kode. Buka iniurl: http://localhost:8080/index.php?r=gii. Kemudian, klik tombol "Start" di bawah header "Model generator". Isi Nama Tabel (“user”) dan Model Class (“MyUser”), klik tombol “Preview” dan terakhir, klik tombol “Generate”.
Model MyUser akan muncul di direktori model.
Penyedia Data Aktif
Step 1 - Buat fungsi yang disebut actionDataProvider di dalam 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);
}
Pada kode di atas, kami mendefinisikan sebuah instance dari ActiveDataProviderkelas dan pengguna tampilan dari halaman pertama. Ituyii\data\ActiveDataProvider kelas menggunakan komponen aplikasi DB sebagai koneksi DB.
Step 2 - Jika Anda memasukkan alamat host lokal http://localhost:8080/index.php?r=site/dataprovider, Anda akan melihat output berikut.
Penyedia Data SQL
Itu yii\data\SqlDataProvider kelas bekerja dengan pernyataan SQL mentah.
Step 1 - Ubah actionDataProvider metode seperti ini.
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 - Ketik http://localhost:8080/index.php?r=site/data-provider di address bar browser web, Anda akan melihat output berikut.
Penyedia Data Array
Itu yii\data\ArrayDataProviderkelas terbaik untuk bekerja dengan array besar. Elemen dalam array ini bisa berupa hasil kueri DAO atau contoh Rekaman Aktif.
Step 1 - Ubah actionDataProvider metode seperti ini.
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 - Jika Anda pergi ke alamatnya http://localhost:8080/index.php?r=site/data-provider melalui web browser, Anda akan melihat output berikut.
Perhatikan, tidak seperti Penyedia Data SQL dan Penyedia Data Aktif, Penyedia Data Larik memuat semua data ke dalam memori, sehingga kurang efisien.