Sabtu, 12 September 2015

DropdownList Berdasarkan Database Pada YII2

Selamat datang... Kali ini kita akan belajar membuat sebuah drop down list berdasarkan database pada YII2.

Mengapa kita perlu membuat sebuah drop down list pada form kita? Kan kita bisa membuat sebuah drop down secara manual. Um... kita buat sebuah studi kasus.

Kita mempunyai dua buah tabel seperti berikut:


Kemudian kita membuat CRUD tabel 'artikel' menggunakan GII dan hasilnya seperti ini:


Kalau belum tahu caranya membuat CRUD menggunakan GII, silahkan ikuti tutorial berikut terlebih dahulu.

Di sini kita anggap saja yang memasukkan data bukanlah penulis artikel itu sendiri. Melainkan orang lain yang tugasnya memang memasukkan data. Masalah yang muncul adalah, petugas tersebut tidak hafal id penulis dan ini membuat pekerjaannya menjadi kurang cepat. Karena itu, kita akan mengganti form input tersebut menjadi dropdown list yang berisi nama-nama penulis. Meskipun nanti, nilai yang disimpan di database adalah id sang penulis.

Baiklah, pertama yang perlu kita edit adalah _form.php yang ada di folder artikel.

Pada bagian atas(yang ada use), kita tambahkan arrayHelper dan models tabel User. Sehingga menjadi seperti ini:

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use common\models\User;


Di atas models User saya namespace-nya "common\models". Bisa disesuaikan dengan namespace dari model yang anda gunakan.

Lalu pada kita ubah :

<?= $form->field($model, 'user_id')->textInput() ?>

Menjadi :

<?=
$form->field($model, 'user_id')->dropDownList(
        ArrayHelper::map(User::find()->all(),'id','username'),
        ['prompt'=>'Pilih User']
)
?>


Penjelasan step by step:
1. Kita ubah textInput() menjadi dropDownList() karena kita akan membuat sebuah dropdown. Tapi, bagaimana dengan isinya?
2. Untuk mengisi dropdown tersebut, kita menggunakan ArrayHelper yang di integrasikan dengan model User.
3. Pada sintaks di atas, User adalah nama class yang ada di dalam model. Sedangkan maksud dari sintak User::find()->all() adalah menemukan dan mengambil semua data yang ada pada tabel user (kan model User dibuat berdasarkan tabel user).
4. 'id' dan 'username' di sana adalah kolom yang ada pada tabel user. 'id' adalah apa yang akan dikirimkan ketika form di submit, sedangkan 'username' adalah apa yang akan muncul (menjadi isi) di dropdown.
5. ['prompt'=>'Pilih User'] berarti, nilai awal atau tulisan yang ada pada dropdown ketika kosong adalah 'Pilih User'.

Jadinya seperti ini:



Jikalau anda merasa ada kesalahan atau error, silahkan berkomentar dengan bijak. Sekian dan terima kasih.

4 komentar:

  1. Tolong Yang jelas jelasinnya..terlebih lagi dimn codingnya ditulis..di view??di model??atau di controller??

    Jadi orang yg baca gk bingung terutama bagi yg msh newbie

    BalasHapus
    Balasan
    1. di file _form.php di folder views , tutorial ini saya pelajari dan buat tutorial sejenis di http://tutorial-yii2.blogspot.co.id/2016/06/yii2-menambahkan-drop-down-box-datanya.html

      Hapus
  2. gan saya mau tanya bila data "id" nya sama misal 01,01,02,02,03 apa bisa tampil semua

    BalasHapus
  3. Gan, di laman view artikel, supaya id user keluar nama usernya gmn gan ?

    BalasHapus