Selamat sore guys, menyambung tutorial sebelumnya. Kali ini kita akan membuat aplikasi dan menghubungkannya dengan database. Tapi untuk saat ini, kita hanya menampilkan data dari database ke aplikasi. Untuk menampilkan data kita perlu konfigurasi database, dan untuk memanipluasi data kita gunakan ActiveRecord. Oke langsung saja.
Berkerja dengan Database
Sesi ini menjelaskan bagaimana membuat halaman baru yang menampilkan data negara yang diambil dari database table country. Untuk itu, kamu akan mengkonfigurasi koneksi database, membuat class Active Record(http://www.yiiframework.com/doc-2.0/guide-db-active-record.html), mendefinisikan Action, dan membuat view. Dengan tutorial ini, kamu akan mempelajari bagaimana:
- Mengkonfigurasi Koneksi DB.
- Mendefinisikan Class Active Record.
- Meng-query data menggunakan class Active Record.
- Menampilkan data di view dengan per halaman.
Perlu diketahui untuk menyelesaikan sesi ini, kamu harus mempunyai pengetahuna basic dan pengalaman menggunakan database. Nyatanya, kamu harus tau bagaimana membuat sebuah database, dan bagaimana mengeksekusi SQL menggunakan DB client tool.
Menyiapkan Database
Untuk memulai, buat database dengan nama "yii2basic", dari database tersebut kamu akan mengambil data dan ditampilkan ke view. Kamu boleh menggunakan databse SQLite, MySQL, PostgreSQL, MSSQL atau Oracle, dan Yii dibuat mendukung banyak aplikasi database. Untuk mudahnya, diasumsikan MySQL yang akan digunakan kali ini.
Lanjut, buat tabel country di database, dan masukkan beberapa contoh data. Kamu bisa menjalan query berikut :
Lanjut, buat tabel country di database, dan masukkan beberapa contoh data. Kamu bisa menjalan query berikut :
CREATE TABLE `country` (Point ini, kamu sudah mempunyai database yii2basic, dan tabel country dengan 3 kolom, berisi 10 data.
`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);
Konfigurasi Koneksi Database
Sebelum memulai, cek dulu sudah terinstal PDO PHP Extension dan driver PDO untuk database yang kamu gunakan (contoh : pdo_mysql untuk MySQL). Ini merupakan kebutuhan dasar jika aplikasimu membutuhkan database.
Dengan terinstalnya ini, buka file "config/db.php" dan rubah prameter sesuai databasemu. Secara default, ikuti config berikut :
Dengan terinstalnya ini, buka file "config/db.php" dan rubah prameter sesuai databasemu. Secara default, ikuti config berikut :
'yii\db\Connection',File config/db.php merupakan alat konfigurasi disini. File konfigurasi membutuhkan parameter dan inisialisasi yii\db\Connection yang bisa kamu gunakan untuk menggunakan query SQL di database tersebut. Konfigurasi koneksi di atas dapat di akses pada kode aplikasi dengan ekspresi Yii::$app->db.
'dsn' => 'mysql:host=localhost;dbname=yii2basic',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
];
Membuat Active Record
Untuk menampilkan dan menangkap data di tabel country, buat sebuah class Active Record dengan nama Country, dan simpan di models/Country.php.
Class Country meng-ekstend dari yii\db\ActiveRecord. Kamu tidak perlu menulis kode didalamnya! Dengan kode di atas, kamu akan menghubungkan tabel dari nama class.namespace app\models;
use yii\db\ActiveRecord;
class Country extends ActiveRecord{
}
use app\models\Country;Menggunakan class Country, kamu dapat dengan menudah memanipulasi data di tabel country, seperti yang ditunjakan di bawah :
$countries = Country::find()->orderBy('name')->all();
$country = Country::findOne('US');
echo $country->name;
$country->name = 'U.S.A.';
$country->save();
Info : Active Record merupakan jalan cara paling ampuh untuk mengakses dan memanipulasi database di object-oriented. Kamu dapat mempelajari lebih detail di sesi Active Record. Cara lain, kamu boleh juga interaksi dengan database menggunakan lower-level data dengan mengakses method yaitu Data Access Objects.
Membuat Action
Untuk menampilkan data country ke user, kamu butuh untuk membuat action baru. Dari pada membuat acton baru di SiteController seperti ayng kita pelajari sebelumnya, sebaiknya buat controller baru untuk semua action yang berhubungan dengan data country. Buat dengan nama CountryController, dan buat action index di dalamnya, seperti berikut :
namespace app\controllers;Simpan kode di atas pada file controllers/CountryController.php.
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,
]);
}
}
Action index memanggil Country::find(). Method Active Record membuat query dan menghasilkan semua data dari tabel country. Untuk melimit hasil query, query di di pagination menggunakan objek yii\data\Pagination.
Membuat View
Di dalam direktori views, pertam buat sub direktori dengan nama country. Direktori ini digunakan untuk menghandle semua view yang dirender oleh controller country. Di direktori views/country, buat file dengan nama index.php dan isi dengan kode berikut :
<?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]) ?>
Hasil
Untuk melihat hasil, akses url berikut menggunakan browser
http://hostname/index.php?r=country/index
http://hostname/index.php?r=country/index