PWPB | Laravel [ Introducing Eloquent ]
Introducing Eloquent
Assalamualaikum wr wb, sebelumnya kita telah menyelesaikan CRUD Data menggunakan DB Facade. Nah pada blog kali ini saya akan memberikan penjelasan mengenai cara yang lain untuk berinteraksi dengan Database. Jika belum tau di laravel ini ada dua cara untuk berinteraksi dengan Database yaitu ada Query Builder (DB Facades) dan Eloquent ORM. Untuk blog kali ini saya akan menjelaskan mengenaik Eloquent ORM. Sebelum itu siapkan dulu seperti biasa text editor , project Laravel kemarin, xampp, dan browser. Langsung saja ke penjelasannya
Eloquent ORM
Eloquent adalah sebuah ORM (Object Relational Mapping) yang artinya eloquent ini dapat membantu memetakan sebuah object dengan database dan juga dapat mempermudah user berinteraksi dengan database. Eloquent ini hampir sama dengan Query Builder, kita tidak perlu lagi mengetik query mysql secara lengkap, tetapi kita akan menggunakan fungsi fungsi yang sudah disediakan. Tetapi Eloquent ini akan mengimplementasikan sebuah object (Model) yang nantinya akan mempermudah saat berinteraksi dengan database.
Implementasi
setelah mengetahui arti dan sebagainya. Langsung saja kita ke tahap implementasiannya di tabel siswa.
1. Langkah Pertama
Buat model baru pada folder app dengan nama Siswa.php. Cara agar mudah nya menggunakan php artisan dengan command "php artisan make:model Siswa". Setelah model Siswa dibuat, masukan kodingan dibawah ini.
Penjelasan :
$table -> Variabel
untuk
menentukan
nama
tabel
pada database untuk
model ini
$fillable -> Variabel
untuk
menentukan
field apa
saja
yang akan
di-fill / di-insert ke
tabel
pada model ini.
Biasanya
digunakan
untuk
mass-assignment
Langkah Kedua
Modifikasi file SiswaController.php menjadi kodingan di bawah ini
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Siswa;
class SiswaController extends Controller {
// |--------------------------------------------------------------------------
// | CRUD With Eloquent
// |--------------------------------------------------------------------------
public function index() {
$data['siswa'] = Siswa::orderBy('nis')->get();
return view('siswa', $data);
}
public function create() {
return view('form.form-siswa');
}
// Function Store Cara 1
// public function store(Request $request) {
// $rule = [
// 'nis' => 'required|numeric|unique:t_siswa,nis',
// 'nama_lengkap' => 'required|string',
// 'jenis_kelamin' => 'required',
// 'golongan_darah' => 'required',
// ];
// $this->validate($request, $rule);
// $input = $request->all();
// $status = Siswa::create($input);
// if ($status) {
// return redirect('/data-siswa')->with('success','Data Berhasil Ditambahkan');
// } else {
// return redirect('/create-siswa')->with('error','Data Gagal Ditambahkan');
// }
// }
public function store(Request $request) {
$rule = [
'nis' => 'required|numeric|unique:t_siswa,nis',
'nama_lengkap' => 'required|string',
'jenis_kelamin' => 'required',
'golongan_darah' => 'required',
];
$this->validate($request, $rule);
$input = $request->all();
$siswa = new Siswa;
$siswa->nis = $input['nis'];
$siswa->nama_lengkap = $input['nama_lengkap'];
$siswa->jenis_kelamin = $input['jenis_kelamin'];
$siswa->golongan_darah = $input['golongan_darah'];
$status = $siswa->save();
if ($status) {
return redirect('/data-siswa')->with('success','Data Berhasil Ditambahkan');
} else {
return redirect('/create-siswa')->with('error','Data Gagal Ditambahkan');
}
}
public function edit(Request $request, $id) {
$data['siswa'] = Siswa::find($id);
return view ('form.form-siswa', $data);
}
// Function Update Cara 2
// public function update(Request $request, $id) {
// $rule = [
// 'nama_lengkap' => 'required|string',
// 'jenis_kelamin' => 'required',
// 'golongan_darah' => 'required',
// ];
// $this->validate($request, $rule);
// $input = $request->all();
// $siswa = Siswa::find($id);
// $status = $siswa->update($input);
// if ($status) {
// return redirect('/data-siswa')->with('success','Data Berhasil Diupdate');
// } else {
// return redirect('/create-siswa')->with('error','Data Gagal Diupdate');
// }
// }
public function update(Request $request, $id) {
$rule = [
'nama_lengkap' => 'required|string',
'jenis_kelamin' => 'required',
'golongan_darah' => 'required',
];
$this->validate($request, $rule);
$input = $request->all();
$siswa = Siswa::find($id);
$siswa->nis = $input['nis'];
$siswa->nama_lengkap = $input['nama_lengkap'];
$siswa->jenis_kelamin = $input['jenis_kelamin'];
$siswa->golongan_darah = $input['golongan_darah'];
$status = $siswa->update();
if ($status) {
return redirect('/data-siswa')->with('success','Data Berhasil Diupdate');
} else {
return redirect('/create-siswa')->with('error','Data Gagal Diupdate');
}
}
public function destroy(Request $request, $id) {
$siswa = Siswa::find($id);
$status = $siswa->delete();
if ($status) {
return redirect('/data-siswa')->with('success','Data Berhasil Dihapus');
} else {
return redirect('/create-siswa')->with('error','Data Gagal Dihapus');
}
}
Penjelasan :
Siswa::find($id)
Method find hanya
ada
pada Eloquent Model, digunakan
untuk
mencari
data pada model berdasarkan
primary key. Biasanya
primary key yang dicari
adalah
id.
Selain
id anda
dapat
mengaturnya
pada model dengan
meng-override
variabel
public $primaryKey
Jika
dalam
Query SQL, fungsi
diatas
akan
menciptakan
query sebagai
berikut:
SELECT
* FROM t_siswa
WHERE id = ‘$id’.
Studi Kasus
A. Studi Kasus 6.1
buat model di folder App dengan nama Kelas. untuk mudahnya gunakan saja php artisan dengan command "php artisan make:model Kelas". Setelah dibuat masukan kodingan di bawah ini di model Kelas.php
ubah file KelasController.php menjadi kodingan di bawah ini
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Kelas;
class KelasController extends Controller
{
// |--------------------------------------------------------------------------
// | CRUD With Eloquent
// |--------------------------------------------------------------------------
public function index() {
$data['kelas'] = Kelas::get();
return view('kelas',$data);
}
public function create() {
return view('form.form-kelas');
}
public function store(Request $request) {
$rule = [
'nama_kelas' => 'bail|required|string|unique:t_kelas,nama_kelas',
'jurusan' => 'required|string',
'lokasi_lab' => 'required|string',
'nama_wali_kelas' => 'required|string',
];
$this->validate($request, $rule);
$input = $request->all();
$kelas = new Kelas;
$kelas->nama_kelas = $input['nama_kelas'];
$kelas->jurusan = $input['jurusan'];
$kelas->lokasi_lab = $input['lokasi_lab'];
$kelas->nama_wali_kelas = $input['nama_wali_kelas'];
$status = $kelas->save();
if ($status) {
return redirect('/data-kelas')->with('success','Data Berhasil Ditambahkan');
} else {
return redirect('/create-kelas')->with('error','Data Gagal Ditambahkan');
}
}
public function edit(Request $request, $id) {
$data['kelas'] = Kelas::find($id);
return view ('form.form-kelas', $data);
}
public function update(Request $request, $id) {
$rule = [
'jurusan' => 'required|string',
'lokasi_lab' => 'required|string',
'nama_wali_kelas' => 'required|string',
];
$this->validate($request, $rule);
$input = $request->all();
$kelas = Kelas::find($id);
$kelas->nama_kelas = $input['nama_kelas'];
$kelas->jurusan = $input['jurusan'];
$kelas->lokasi_lab = $input['lokasi_lab'];
$kelas->nama_wali_kelas = $input['nama_wali_kelas'];
$status = $kelas->update();
if ($status) {
return redirect('/data-kelas')->with('success','Data Berhasil Diupdate');
} else {
return redirect('/create-kelas')->with('error','Data Gagal Diupdate');
}
}
public function destroy(Request $request, $id) {
$kelas = Kelas::find($id);
$status = $kelas->delete();
if ($status) {
return redirect('/data-kelas')->with('success','Data Berhasil Dihapus');
} else {
return redirect('/create-kelas')->with('error','Data Gagal Dihapus');
}
}
B. Studi Kasus 6.2
Buat Migration untuk tabel t_guru, dengan menggunakan command di bawah ini
setelah migrasi dibuat, masukan kodingan di bawah ini ke dalam file migrasi tersebut. setelah itu migrate dengan command 'php artisan migrate'
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTGuru extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('t_guru', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('nip');
$table->string('nama_guru',100);
$table->string('jenis_kelamin',1);
$table->string('no_hp');
$table->string('alamat',150);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('t_guru');
}
}
setelah berhasil di migrate maka akan muncul tabel t_guru dengan tampilan berikut
File view untuk CRUD Data Guru
guru.blade.php
<center>
<div class="card mt-5 mb-5" style="width:80%">
<div class="card-header">
<div class="row">
<h2 style="margin-left:340px; margin-right:290px;" class="text-info">Data Guru SMK Negeri 4 Bandung</h2>
<a href="{{ url('create-guru') }}"><i class="fas fa-user-plus fa-2x mt-2"></i></a>
</div>
</div>
<div class="card-body">
@if(session('success'))
<div class="alert alert-success">
<i class="far fa-check-circle"></i>
{{ session('success') }}
</div>
@endif
@if(session('error'))
<div class="alert alert-error">
<i class="far fa-times-circle"></i>
{{ session('error') }}
</div>
@endif
<div class="table-responsive">
<table class="table table-bordered text-center" id="dataTable" border="1" cellspacing="0" cellpadding="10" width="100%">
<thead>
<tr align="center" class="text-dark">
<th>No</th>
<th>Foto</th>
<th>NIP</th>
<th>Nama Lengkap</th>
<th>Gender</th>
<th>No Handphone</th>
<th>Alamat</th>
<th>Action</th>
</tr>
</thead>
@foreach ($guru as $row)
<tr align="center">
<td>{{$loop->iteration}}</td>
<td width="60"><img src="/image/{{ $row->jenis_kelamin == 'L' ? 'ava.png' : 'ava2.png' }}" width="90%"></td>
<td>{{$row->nip}}</td>
<td>{{$row->nama_guru}}</td>
<td width="120">{{$row->jenis_kelamin}}</td>
<td width="140">{{$row->no_hp}}</td>
<td>{{$row->alamat}}</td>
<td width="230">
<div class="row">
<div class="col-6">
<a href="{{ url('/data-guru/' . $row->id . '/edit') }}" class="btn btn-warning" style="width:100px;" ><i class="fas fa-edit mr-1"></i>Edit</a>
</div>
<div class="col-6">
<form action="{{ url('/data-guru', $row->id) }}" method="POST">
@method('DELETE')
@csrf
<button type="submit" class="btn btn-danger"style="width:100px;" onclick="return confirm('Yakin akan menghapus data ini ?');">
<i class="fas fa-trash-alt mr-1"></i>Delete
</button>
</form>
</div>
</div>
</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
</center>
form-guru.blade.php
<div class="card" style="width:50%; margin:auto;">
<div class="card-header">
<h2 class="text-info">Tambah Data Guru</h2>
</div>
<div class="card-body">
@if(session('error'))
<div class="alert alert-error">
<i class="far fa-times-circle"></i>
{{ session('error') }}
</div>
@endif
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong><i class="fas fa-exclamation-triangle text-warning"></i> Perhatian</strong>
<br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ url('data-guru', @$guru->id) }}" method="POST">
@csrf
@if (!empty($guru))
@method('PATCH')
@endif
<div class="form-group">
<label for="nip" class="text-dark">NIP</label>
<input type="text" class="form-control" id="nip" name="nip" value="{{ old('nip', @$guru->nip) }}">
</div>
<div class="form-group">
<label for="nama_guru" class="text-dark">Nama Lengkap</label>
<input type="text" class="form-control" id="nama_guru" name="nama_guru" value="{{ old('nama_guru', @$guru->nama_guru) }}">
</div>
<div class="form-group">
<label class="text-dark">Jenis Kelamin</label>
<div class="custom-control custom-radio">
<input type="radio" id="jenis_kelaminL" name="jenis_kelamin" class="custom-control-input" value="L" {{ old('jenis_kelamin', @$guru->jenis_kelamin)=='L' ? 'checked' : '' }}>
<label class="custom-control-label text-dark" for="jenis_kelaminL">Laki - Laki</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="jenis_kelaminP" name="jenis_kelamin" class="custom-control-input" value="P" {{ old('jenis_kelamin', @$guru->jenis_kelamin)=='P' ? 'checked' : '' }}>
<label class="custom-control-label text-dark" for="jenis_kelaminP">Perempuan</label>
</div>
</div>
<div class="form-group">
<label for="no_hp" class="text-dark">No Handphone</label>
<input type="text" class="form-control" id="no_hp" name="no_hp" value="{{ old('no_hp', @$guru->no_hp) }}">
</div>
<div class="form-group">
<label for="alamat">Alamat</label>
<textarea class="form-control" id="alamat" name="alamat" rows="3" >{{ old('alamat', @$guru->alamat) }}</textarea>
</div>
<input type="submit" value="Simpan" class="btn btn-success mt-3" style="width:80px;">
<a href="{{ route('guru') }}" class="btn btn-secondary mt-3" style="width:80px;">Back</a>
</form>
</div>
</div>
Buat file controller dengan command "php artisan make:controller GuruController". dan masukan kodingan di bawah ini
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Guru;
class GuruController extends Controller
{
public function index() {
$data['guru'] = Guru::get();
return view('guru',$data);
}
public function create() {
return view('form.form-guru');
}
public function store(Request $request) {
$rule = [
'nip' => 'bail|required|string|unique:t_guru,nip',
'nama_guru' => 'required|string',
'jenis_kelamin' => 'required|string',
'no_hp' => 'required|numeric',
'alamat' => 'required|string',
];
$this->validate($request, $rule);
$input = $request->all();
$guru = new Guru;
$guru->nip = $input['nip'];
$guru->nama_guru = $input['nama_guru'];
$guru->jenis_kelamin = $input['jenis_kelamin'];
$guru->no_hp = $input['no_hp'];
$guru->alamat = $input['alamat'];
$status = $guru->save();
if ($status) {
return redirect('/data-guru')->with('success','Data Berhasil Ditambahkan');
} else {
return redirect('/create-guru')->with('error','Data Gagal Ditambahkan');
}
}
public function edit(Request $request, $id) {
$data['guru'] = Guru::find($id);
return view ('form.form-guru', $data);
}
public function update(Request $request, $id) {
$rule = [
'nip' => 'bail|required|string',
'nama_guru' => 'required|string',
'jenis_kelamin' => 'required|string',
'no_hp' => 'required|numeric',
'alamat' => 'required|string',
];
$this->validate($request, $rule);
$input = $request->all();
$guru = Guru::find($id);
$guru->nip = $input['nip'];
$guru->nama_guru = $input['nama_guru'];
$guru->jenis_kelamin = $input['jenis_kelamin'];
$guru->no_hp = $input['no_hp'];
$guru->alamat = $input['alamat'];
$status = $guru->update();
if ($status) {
return redirect('/data-guru')->with('success','Data Berhasil Diupdate');
} else {
return redirect('/create-guru')->with('error','Data Gagal Diupdate');
}
}
public function destroy(Request $request, $id) {
$guru = Guru::find($id);
$status = $guru->delete();
if ($status) {
return redirect('/data-guru')->with('success','Data Berhasil Dihapus');
} else {
return redirect('/create-guru')->with('error','Data Gagal Dihapus');
}
}
}
Buat model dengan nama Guru.php di folder App. dan masukan kodingan di bawah ini
Hasil Untuk CRUD Data Guru dengan Eloquent
C. Studi Kasus 6.3
Untuk perbedaannya saya akan kasih satu perbandingan fungsi yaitu update
DB Facade
DB Facade tidak memiliki model, sehingga secara manual kita harus mengetikkan table mana yang akan digunakan setiap kita membuat fungsi query di laravel nya. Intinya DB Facades berinteraksi langsung ke Database, layaknya Query. Itulah kenapa DB Facades biasa disebut Query Builder
Eloquent ORM
Eloquent membuat interaksi dengan database lebih mudah, karena setiap table pada database dibuat class khusus untuk setting atau untuk mengatur table nya mulai dari menentukan table apa yang akan digunakan oleh class model nya, mengatur apa saja column yang boleh diisi dan yang tidak diisi, dan dapat mengisi timestamp sendiri (created_at dan updated_at). Intinya Eloquent lebih ke menyambungkan model dengan Database, itulah kenapa sebelum menjalankan Eloquent, Admin membuat model Siswa.php didalam folder App
Sekian materi yang dapat saya jelaskan mengenai Eloquent ORM di Laravel ini. Semoga bermanfaat untuk teman teman semua yang membaca blog ini dan semoga bisa berguna jika teman teman mengalami kesulitan saat membuat aplikasi web menggunakan Laravel. Mohon maaf jika banyak kesalahan saya akan terus memperbaikinya. Wassalamualaikum wr wb.
0 Comments