Cara Menggunakan Mutator Dan Accessors Di Laravel
Laravel Accessors dan Mutators adalah metode khusus yang ditentukan pengguna. Accessors digunakan untuk memformat atribut saat Anda mengambilnya dari database. Sedangkan, Mutator digunakan untuk memformat atribut sebelum menyimpannya ke dalam database.
Mari Mulai Membuat dan Menggunakan Accessor dan Mutator!
Misalkan Anda memiliki Model
yang terlihat seperti ini :
app/Product.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
use HasFactory;
protected $fillable = [
'name', 'amount', 'description'
];
// Mutator for Name column
// when "name" will save, it will convert into lowercase
public function setNameAttribute($value)
{
$this->attributes['name'] = strtolower($value);
}
}
dan Controller yang terlihat seperti ini:
ProductController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Product;
class ProductController extends Controller
{
public function setProduct()
{
$product = new Product();
$product->name = "Sample Product 1";
$product->amount = 12;
$product->description = "Sample product created";
$product->save();
}
}
juga rute yang terlihat seperti ini :
web.php
Route::get('product', [ProductController::class, 'setProduct']);
Langkah 1: Buat Mutator Dalam Model
Mutator mengubah nilai atribut Eloquent saat disetel. Mutator berfungsi saat kita menyimpan data di dalam tabel database.
Sintaks untuk membuat mutator –
Untuk menentukan mutator, tentukan metode set {Attribute}Attribute pada model Anda di mana {Attribute} adalah nama cased "studly" dari kolom yang ingin kita ubah saat disimpan.
Rekatkan ini di app/Product.php
public function setNameAttribute($value)
{
$this->attributes['name'] = strtolower($value);
}
Seharusnya sekarang terlihat seperti ini :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
use HasFactory;
protected $fillable = [
'name', 'amount', 'description'
];
// Mutator for Name column
// when "name" will save, it will convert into lowercase
public function setNameAttribute($value)
{
$this->attributes['name'] = strtolower($value);
}
}
Periksa hasilnya
Buka URL: http://127.0.0.1/product
Hasilnya akan terlihat seperti ini :
Langkah 2: Buat Pengakses Dalam Model
Pengakses mengubah nilai atribut Eloquent saat diakses. Ini berfungsi saat kami mengambil data dari tabel.
Sintaks untuk membuat accessor –
Untuk menentukan pengakses, buat metode get{Attribute}Attribute pada model Anda di mana {Attribute} adalah nama kolom yang diberi huruf "studly".
Buka Product.php
dan tambahkan kode ini ke dalamnya
public function getNameAttribute($value)
{
return strtoupper($value);
}
Buka file controller ProductController.php
dan tambahkan metode ini ke dalamnya.
public function getProducts()
{
$products = Product::get();
foreach ($products as $product) {
echo $product->name . "<br/>";
}
}
Buka web.php dan tambahkan rute ini ke dalamnya.
Route::get('list-product', [ProductController::class, 'getProducts']);
Periksa Hasilnya
URL: http://127.0.0.1/list-product
Anda harus melihat daftar nama (nama produk) masing-masing dalam huruf besar. Ini karena kami telah mengubah nilai dengan metode accessor.
Hore! Kami telah berhasil membuat dan menggunakan pengakses dan mutator, gunakan ini pada proyek mendatang Anda untuk meningkatkan keterbacaan, stabilitas, dan kinerja kode Anda!