Selasa, 01 Maret 2016
Panduan Yii2, Koneksi Database di Yii2
Pada bagian ini kita akan membahas tentang bagaimana cara membuat sebuah halaman baru yang menampilkan nama negara yang diambil dari database dengan nama country. Untuk melakukannya, anda harus mengkonfigurasi database terlebih dahulu, kemudian membuat Active Record class, lalu mendefinisikan sebuah action, dan membuat sebuah view.Melalui tutorial ini, anda akan mempelajari bagaimana untuk:
- Mengkonfigurasi koneksi database.
- Mendefinisikan class Active Record.
- Query data menggunakan class Active Record.
- Menampilkan data dalam vew dengan pagination.
Menyiapkan Database
Pertama-tama, buat sebuah database bernama yii2basic, dimana nantinya anda akan menyimpan data aplikasi anda. Anda juga bisa menggunakan database SQLite, MySQL, PgSQL, Oracle database dan lain-lain. Karena Yii sudah mendukung banyak aplikasi database. Untuk kemudahan, database MySQL lah yang akan digunakan dalam panduan ini.Selanjutnya, buat sebuah tabel bernama country dalam database, dan masukkan beberapa contoh data. Anda bisa menjalankan SQL statement berikut:
CREATE TABLE `country` ( `code` CHAR(2) NOT NULL PRIMARY KEY, `name` CHAR(52) NOT NULL, `population` INT(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `country` VALUES ('AU','Australia',18886000); INSERT INTO `country` VALUES ('BR','Brazil',170115000); INSERT INTO `country` VALUES ('CA','Canada',1147000); INSERT INTO `country` VALUES ('CN','China',1277558000); INSERT INTO `country` VALUES ('DE','Germany',82164700); INSERT INTO `country` VALUES ('FR','France',59225700); INSERT INTO `country` VALUES ('GB','United Kingdom',59623400); INSERT INTO `country` VALUES ('IN','India',1013662000); INSERT INTO `country` VALUES ('RU','Russia',146934000); INSERT INTO `country` VALUES ('US','United States',278357000);
Sekarang, anda mempunyai sebuah database bernama yii2basic, dan didalamnya terdapat tabel country dengan 3 kolom, berisi 10 record data.
Konfigurasi Koneksi Database Yii2
Sebelum kita lanjut, pastikan PDO PHP extension dan Driver PDO untuk database yang anda gunakan (misalnya pdo_mysql untuk MySQL). Karena PDO adalah kebutuhan dasar jika aplikasi anda menggunakan database.Buka file config/db.php dan merubah parameter menyesuaikan database anda. Secara default, file tersebut memuat kode berikut:
<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii2basic', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ];File config/db.php adalah tool konfigurasi berbasis file. Konfigurasi disini untuk mengatur parameter yang dibutuhkan untuk membuat dan menginisialisasi instance yii\db\Connection dimna anda bisa membuat query database SQL.
Koneksi database yang dikonfigurasi diatas dapat diakses dari aplikasi melalui ekspresi Yii::$app->db.
Info: file config/db.php di include oleh konfigurasi utama config/web.php.
Membuat Active Record
Untuk mengambil data dari tabel country, buat sebuah Active Record class bernama Country, dan simpan kedalam file model/Country.php.<?php namespace app\models; use yii\db\ActiveRecord; class Country extends ActiveRecord { }Class Country meng-extend dari yii\db\ActiveRecord. Anda tidak perlu menulis kode apapun didalamnya, hanya dengan kode diatas, Yii akan menebak nama tabel dari nama class.
Info: jika nama class dan tabel tidak sama, anda bisa meng-override method yii\db\ActiveRecord::tableName() untuk menyesuaikan nama tabel.Menggunakan class Country, anda dapat dengan mudah memanipulasi data di dalam tabel country seperti pada cuplikan kode berikut ini:
use app\models\Country; // get all rows from the country table and order them by "name" $countries = Country::find()->orderBy('name')->all(); // get the row whose primary key is "US" $country = Country::findOne('US'); // displays "United States" echo $country->name; // modifies the country name to be "U.S.A." and save it to database $country->name = 'U.S.A.'; $country->save();
Info:Active Record adalah cara paling baik untuk mengakses dan memanipulasi data database secara object-oriented. Untuk informasi lebih lanjut tentang Active Record, anda bisa membacanya di dokumentasi resmi Active Record.Membuat Action
Untuk menampilkan data country ke user, anda perlu membuat sebuah action baru. Daripada menempatkan action baru kedalam controller site seperti pada tutorial sebelumnya, akan lebih baik apabila anda membuat controller baru yang secara khusus menangani action yang berhubungan dengan data country.
Beri nama controller baru kita tadi CountryController, dan buat sebuah action index didalamnya, seperti pada kode berikut:
<?php namespace app\controllers; use yii\web\Controller; use yii\data\Pagination; use app\models\Country; class CountryController extends Controller { public function actionIndex() { $query = Country::find(); $pagination = new Pagination([ 'defaultPageSize' => 5, 'totalCount' => $query->count(), ]); $countries = $query->orderBy('name') ->offset($pagination->offset) ->limit($pagination->limit) ->all(); return $this->render('index', [ 'countries' => $countries, 'pagination' => $pagination, ]); } }Simpan kode diatas dalam file controllers/CountryController.php.
Action index memanggil Country::find(). Active Record method membangun query Database dan menerima semua data dari tabel country. Untuk membatasi jumlah data yang diambil dari tiap request, query di paging dengan bantuan object yii\data\Pagination. Cara kerja object Pagination adalah sebagai berikut:
Mengatur offset dan limit untuk statement sehingga hanya beberapa data yang ditampilkan dalam satu halaman.
Digunakan untuk view untuk menampilkan pager yang terdiri dari tombol daftar halaman.
Action index me-render view dengan nama index, dan meneruskan data country beserta informasi pagination.
Membuat View
Didalam direktori views, pertama-tama buat sub-directory bernama country. Folder ini digunakan untuk menyimpan semua view yang dirender oleh controller country. Didalam dierktori views/country, buat sebuah file bernama index.php yang berisi:<?php use yii\helpers\Html; use yii\widgets\LinkPager; ?> <h1>Countries</h1> <ul> <?php foreach ($countries as $country): ?> <li> <?= Html::encode("{$country->name} ({$country->code})") ?>: <?= $country->population ?> </li> <?php endforeach; ?> </ul> <?= LinkPager::widget(['pagination' => $pagination]) ?>View ini memiliki 2 bagian untuk menampilkan data country. Pada bagian pertama, data country di lewatkan dan di render sebagai html unordered list. Bagian kedua, widget yii\widgets\LinkPager di render menggunakan informasi paging/pagination yang diteruskan dari action. Widget LinkPager menampilkan list tombol halaman. Dengan meng-klik salah satu, halaman akan me-refresh data country sesuai dengan halaman.
Uji Coba Hasil
Untuk melihat hasilnya, gunakan browser anda untuk mengakses alamat.
http://localhost/index.php?r=country/index
Anda akan melihat halaman yang menampilkan 5 data country. Dibawahnya, terdapat pager yang terdiri dari 4 tombol, jika anda klik tombol nomor 2, akan muncul halaman kedua yang juga memuat 5 data country dari database. Perhatikan juga perubahan pada URL, ketika anda membuka halaman kedua, maka url akan berubah menjadi:
http://localhost/index.php?r=country/index&page=2
Pagination menyediakan semua fungsi yang dibutuhkan untuk mem-paging data. Dan berikut cara kerja paging diatas:- Pertama, Pagination mewakili halaman pertama, dimana query SELECT untuk tabel country memiliki clause LIMIT 5 OFFSET 0. Hasilnya, 5 data country pertama diambil dan ditampilkan.
- Widget LinkPager me-render tombol halaman menggunakan URL yang dibuat oleh Pagination. URL memuat query parameter page, yang mana mewakili nomor halaman berbeda.
- Jika anda klik tombol halaman "2", request baru untuk route country/index akan dipanggil dan ditangani. Pagination membaca parameter query page dari URL dan mengatur nomor halaman saat ini menjadi 2. Query data country sekarang memiliki clause LIMIT 5 OFFSET 5 dan mengambil 5 data selanjutnya untuk ditampilkan.
<<Sebelumnya : Membuat Form di Yii2
Kembali ke Panduan Memulai Yii2
Lanjut ke : Auto generate dengan Gii>>
loading...
Langganan:
Posting Komentar
(
Atom
)
Popular Posts
-
Secara default, Yii2 dibekali oleh template Bootstrap 3. Namun kita juga bisa menambahkan template lain yang lebih baik, seperti misalnya ...
-
Pada tutorial ini, saya akan membahas bagaimana cara membuat aplikasi CRUD (Create Read Update Delete) database secara otomatis dengan mengg...
-
RBAC (Role-Based Access Control) adalah konsep Access Control di Yii2 yang memisahkan hak akses user berdasarkan role atau peran. Yii2 sen...
© Asudahlah.com 2016 . Powered by Twitter Bootstrap , Blogger
Tidak ada komentar :
Posting Komentar