Loading...
Tutorial Dasar Penggunaan Model, View, dan Controller di Laravel Part 2

Tutorial Dasar Penggunaan Model, View, dan Controller di Laravel Part 2
26 January 2018 17:01:35

Sebagai lanjutan dari pembuatan controller dan view sebelumnya, saat ini kita akan belajar menampilkan data menggunakan model di Laravel. Kita akan menggunakan tabel yang sudah dibuat pada tutorial sebelumnya, dan disarankan untuk mengisi data dummy dulu pada tabel tersebut. Mungkin query dummy ini bisa membantu pengisian data dummy biar sama..

INSERT INTO `db_latihan`.`tb_inventory` (`nama_barang`, `jumlah`, `kategori`, `deskripsi`) VALUES ('Minyak Angin', '10', '1', 'lorem ipsum dolor sit amet');
INSERT INTO `db_latihan`.`tb_inventory` (`nama_barang`, `jumlah`, `kategori`, `deskripsi`) VALUES ('Kucing Jantan', '8', '2', 'asd kadsjadshj ads');
INSERT INTO `db_latihan`.`tb_inventory` (`nama_barang`, `jumlah`, `kategori`) VALUES ('Kipas Angin', '14', '1');

INSERT INTO `db_latihan`.`tb_inventory_category` (`nama_kategori`, `deskripsi`) VALUES ('Benda', 'hehehe');
INSERT INTO `db_latihan`.`tb_inventory_category` (`nama_kategori`, `deskripsi`) VALUES ('Binatang', 'hmmmm');

dummy data 1

dummy data 2

Pertama-tama kita perlu membuat model untuk masing-masing tabel yang ada. command untuk membuat model adalah : php artisan make:model NamaModel. Demi alasan kerapian struktur file, sangat disarankan nama model yang diinputkan diawali dengan Model/.... agar seluruh model yang kita buat disimpan dalam 1 direktori yang sama, yaitu app/Model/.

php artisan make model

Apabila contoh diatas berhasil dijalankan, maka pada direktori app/Model akan ada 2 file bernama InventoryModel dan InventoryCategoryModel. Model / Eloquent pada laravel digunakan untuk mewakili pemanggilan tabel. Dengan demikian, model merupakan bagian yang utama dimana kita akan berinteraksi ke tabel yang bersangkutan melalui model yang dibuat. InventoryModel digunakan untuk berinteraksi dengan tabel tb_inventory, dan InventoryCategoryModel digunakan untuk berinteraksi dengan tabel tb_inventory_category.

Apabila kedua file tersebut dibuka, isinya adalah sebuah class kosong yang dapat kita isi properti dan method-methodnya. Agar model / eloquent dapat bekerja optimal, kita harus mengisi class tersebut dengan property wajib seperti : 

  • protected $table = 'nama_tabel'; untuk mendefinisikan model tersebut mewakili tabel apa
  • protected $primaryKey = 'kolom_primary_key'; untuk mendefinisikan apa nama kolom primary key di tabel tersebut. (Note : kalau kita menggunakan nama kolom "id" sebagai primary key, maka bagian ini dapat diabaikan / tidak perlu diisi)
  • protected $fillable = ['kolom_a', 'kolom_b', 'kolom_c', ...]; untuk mendefinisikan kolom apa saja yang terdapat pada tabel tersebut.

 

Contoh penerapannya adalah sebagai berikut : 

<?php
namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class InventoryModel extends Model
{
    protected $table = 'tb_inventory';

    #kalau kolom primary keynya bernama id, maka baris dibawah ini boleh diisi, dan boleh juga tidak buat
    protected $primaryKey = 'id';

    protected $fillable = [
    	'nama_barang',
    	'jumlah',
    	'kategori',
    	'deskripsi',
    	'created_at',
    	'updated_at'
    ];

    
}
<?php
namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class InventoryCategoryModel extends Model
{
    protected $table = 'tb_inventory_category';

    protected $fillable = [
    	'nama_kategori',
    	'deskripsi',
    	'created_at',
    	'updated_at'
    ];

    
}

Jika model sudah selesai dibuat, maka model sudah dapat kita panggil di controller. Untuk memanggil sebuah model di Controller, kita harus mendefinisikan model yang ingin digunakan pada statement use di bagian atas controller, setelah itu barulah model dapat digunakan.

Cara pengisian alamat di statement use adalah dengan menggabungkan nama namespace model yang ingin dipanggil dengan nama class model tersebut. Karena nama namespacenya adalah App\Model, dan nama classnya adalah InventoryModel, maka statement usenya adalah "use App\Model\InventoryModel".

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

#pendaftaran model inventorymodel dan category
use App\Model\InventoryModel;
use App\Model\InventoryCategoryModel;

class HomeController extends Controller
{
    //
    public function index(){

    	//langsung dites
    	$inventory = InventoryModel::get();
    	dd($inventory); //<- untuk debug / dumping data

    	return view('home')->with([
    		'title' => 'Contoh Judul Halaman',
    		'paragraf' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Id, dignissimos!'
    	]);

    }
}

Contoh diatas menjelaskan bahwa model InventoryModel dan InventoryCategoryModel sudah didaftarkan dengan statement use. Lalu di method index dilakukan pemanggilan dengan fungsi static ::get() untuk menerima seluruh data yang ada di model tersebut. fungsi dd() merupakan helper Laravel untuk dumping / debugging dimana data yang ada pada variabel tersebut ditampilkan dalam model terstruktur yang dapat kita akses dengan mudah. Hasil dumpingnya adalah seperti dibawah ini : 

Kalau dumping data sudah berhasil, sekarang fungsi dd() tersebut boleh dihapus, dan variabel $inventory tersebut akan kita kirimkan ke view home untuk ditampilkan. Dengan demikian HomeController method index() akan kita update menjadi : 

...
    public function index(){
    	//get data dari model inventory
    	$inventory = InventoryModel::get();

    	return view('home')->with([
    		'title' => 'Contoh Judul Halaman',
    		'paragraf' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Id, dignissimos!',
    		'data' => $inventory
    	]);
    }
...

Pada contoh diatas, kita mengirimkan parameter 'data' yang berisi data inventory ke view home. Parameter $data tersebut tidak dapat langsung ditampilkan karena masih bertipe data objek, untuk itu kita perlu melakukan fungsi perulangan pada view home.blade.php untuk menampilkannya. 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Contoh File Template</title>
</head>
<body>
	<h1>{{ $title }}</h1>


	<p>
		{!! $paragraf !!}
	</p>

	<table>
		<thead>
			<tr>
				<th>Nama Inventory</th>
				<th>Jumlah</th>
				<th>Kategori</th>
				<th>Deskripsi</th>
				<th>Aksi</th>
			</tr>
		</thead>
		<tbody>
			@foreach ($data as $row)
			<tr>
				<td>{{ $row->nama_barang }}</td>
				<td>{{ $row->jumlah }}</td>
				<td>{{ $row->kategori }}</td>
				<td>{{ $row->deskripsi }}</td>
				<td></td>
			</tr>
			@endforeach
		</tbody>
	</table>

</body>
</html>

Pada contoh diatas kita melihat ada tambahan tag table untuk menampilkan data inventory. Yang perlu perhatian lebih adalah pada bagian looping di dalam tag <tbody>. Untuk melakukan fungsi looping pada view, kita nggak perlu buka tag php lagi, melainkan cukup menggunakan sintaks Blade @foreach sebagai pembuka, dan @endforeach sebagai penutup. Dalam contoh tersebut, variabel $data (parameter dari data inventory) tersebut dilakukan looping menggunakan inisial $row, dan karena row tersebut berbentuk objek, maka nilainya dioutputkan menggunakan tanda panah, sehingga hasilnya adalah seperti ini : 

penerapan view model

Sebagai ringkasan, yang perlu diperhatikan dalam penggunaan model adalah, Model harus dibuat mewakili setiap tabel yang kita buat. Model tersebut harus memiliki property $table, dan $fillable agar dapat digunakan dengan baik. Ketika model tersebut dipanggil, kita harus mendefinisikannya melalui statement use dengan mengetikkan namespace beserta nama classnya, barulah model dapat dipanggil di controller. 

Bagaimana cara membuat fungsi CRUD (create read update delete) dan Relasi antar model di Laravel? Ditunggu updatean selanjutnya yak~ kalau ada kesulitan selama pembuatan bisa dishare di kolom komentar dibawah.