Halo teman-teman semuanya, pada artikel kali ini kita semua akan belajar tentang Eloquent Accessor di dalam Laravel dan bagaimana cara mengimplementasikannya.
Laravel memiliki fitur yang bernama Mutator, Accessor dan Casting, fitur-fitur ini digunakan untuk melakukan manipulasi data di dalam attribute database dengan sangat mudah. Contoh sederhanya misalnya kita ingin melakukan insert data dengan enkripsi ke dalam database dan melakukan deskripsi saat menampilkan dari database secara otomatis, maka kita bisa menggunakan fitur ini.
Apa itu Eloquent Accessor ?
Accessor memungkinkan kita mengubah nilai saat attribute atau field Eloquent diakses. Untuk mendefinisikan Accessor, kita bisa membuat method di dalam Model untuk menentukan attribute yang akan diakses.
Nama method yang dibuat harus sama dengan nama attribute atau field yang akan diformat dan menggunakan CamelCase
.
Contohnya, jika saya punya attribute / field di dalam table dengan nama first_name
, maka untuk nama method-nya adalah firstName()
. Kurang lebih seperti berikut.
protected function firstName(): Attribute
{
//...
}
Langkah 1 - Membuat Accessor untuk Attribute Image
di Model Post
Sekarang kita akan belajar membuat sebuah Accessor yang digunakan untuk mengformat nilai dari attribute atau field image
yang ada di dalam table posts
.
Jadi, saat kita akses attribute atau field tersebut, kita akan memberikan nilai full path dari direktori dimana file gambar tersebut disimpan.
Silahkan teman-teman buka file app/Models/Post.php
, kemudian ubah semua kode-nya menjadi seperti berikut ini.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Post extends Model
{
use HasFactory;
/**
* fillable
*
* @var array
*/
protected $fillable = [
'image',
'title',
'content',
];
/**
* image
*
* @return Attribute
*/
protected function image(): Attribute
{
return Attribute::make(
get: fn ($image) => url('/storage/posts/' . $image),
);
}
}
Dari perubahan kode di atas, pertama kita import Eloquent Attribute
. terlebih dahulu.
use Illuminate\Database\Eloquent\Casts\Attribute;
Setelah itu, kita membuat method baru dengan nama image()
dan di dalamnya kita melakukan return dengan path dimana file image itu berada.
get: fn ($image) => url('/storage/posts/' . $image),
Jadi ketika kita memanggil attribute image
makan akan otomatis menghasilkan output seperti berikut ini :
domain.com/storage/posts/nama_file_image.png
Tapi, jika kita tidak menggunakan fitur Accessor, maka hasilnya akan seperti berikut ini :
nama_file_image.png
Kurang lebih seperti itu pembahasan bagaimana cara membuat Accessor di dalam Laravel. Pada artikel selanjutnya kita semua akan belajar bagaimana cara menampilkan data dengan format JSON untuk Rest API.
Terima Kasih