Pendahuluan
Saat ini kita akan mengenal salah satu magic yang disediakan oleh laravel, yaitu Accessor. Accesor itu sendiri digunakan untuk mengubah nilai atribut ketika data diambil dari model. Artinya, accessor memungkinkan kita untuk memodifikasi nilai atribut sebelum nilai tersebut ditampilkan, cara penulisan sebuah accessor diwajibkan menggunakan camel case
. contohnya sebagai berikut :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected function firstName(): Attribute
{
return Attribute::make(
get: fn (string $value) => ucfirst($value),
);
}
}
Pada kode diatas kita mendefinisikan sebuah accessor dengan nama firstName
, Misalkan kita memiliki attribute di database dengan nama first_name
bernilai john
, ketika kita mengakses attribut first_name
dari model User
, accessor akan mengubah value john
menjadi John
.
Setelah mengenal tentang accessor kita akan memanfaatkannya untuk menampilkan gambar dari tabel categories
dan products
.
Menambahkan Accessor Model Category
Silahkan teman - teman buka file app/Models/Category
, kemudian tambahkan kode berikut ini :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Category extends Model
{
use HasFactory;
protected $fillable = ['name', 'slug', 'image'];
protected function image(): Attribute
{
return Attribute::make(
get: fn ($image) => asset('/storage/categories/' . $image),
);
}
}
Dari perubahan kode di atas, pertama kita import Eloquent Attribute
terlebih dahulu
use Illuminate\Database\Eloquent\Casts\Attribute;
Setelah itu, kita buat sebuah accessor baru dengan nama image
, yang di dalamnya kita melakukan return menggunakan asset
ke dalam folder /storage/app/public/categories
.
Jadi saat kita memanggil attribute image
, makan akan otomatis menghasilkan output seperti berikut ini :
domain.com/storage/categories/nama_file_image.png
Tapi, jika kita tidak menggunakan accessor, maka hasilnya akan seperti berikut ini :
Menambahkan Accessor Model Product
Pada tahap ini kita juga akan menambahkan accessor image
sama seperti yang telah kita buat di model category
, silahkan teman - teman buka file app/Models/Product.php
, kemudian tambahkan kode berikut ini :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Product extends Model
{
use HasFactory;
protected $fillable = ['name', 'slug', 'category_id', 'image', 'quantity', 'price'];
protected function image(): Attribute
{
return Attribute::make(
get: fn ($image) => asset('/storage/products/' . $image),
);
}
public function category()
{
return $this->belongsTo(Product::class);
}
}
Pada kode diatas, pertama - tama kita import terlebih dahulu Eloquent Attribute.
use Illuminate\Database\Eloquent\Casts\Attribute;
Kemudian, kita membuat sebuah accessor dengan nama image
, yang di dalamnya kita melakukan return menggunakan asset
ke dalam folder /storage/app/public/products
.
protected function image(): Attribute
{
return Attribute::make(
get: fn ($image) => asset('/storage/products/' . $image),
);
}
Penutup
Pada artikel kali ini kita telah berhasil menyelesaikan pembuatan accessor untuk menampilkan gambar, berikutnya kita akan lanjutkan untuk membuat beberapa reusable component yang akan kita gunakan nantinya.