Indonesian (Bahasa Indonesia) translation by AaliyaA (you can also view the original English article)
Dalam artikel ini, kita akan pergi melalui mutators dan accessor ORM fasih dalam kerangka web Laravel. Setelah pengenalan, kita akan pergi melalui beberapa contoh untuk memahami konsep-konsep ini.
Dalam Laravel, mutators dan accessor memungkinkanmu untuk mengubah data sebelum disimpan ke dan diambil dari database. Secara khusus, mutator memungkinkanmu untuk mengubah data sebelum disimpan ke database. Di sisi lain, accessor memungkinkanmu untuk mengubah data setelah ia diambil dari database.
Pada kenyataannya, Laravel model adalah pusat tempat dimana anda dapat membuat metode mutator dan accessor. Dan tentu saja, menyenangkan untuk memiliki semua modifikasi anda di satu tempat daripada berserakan di tempat yang berbeda.
Membuat Accessor dan Mutator dalam Kelas Model
Seperti yang anda ketahui dengan konsep dasar mutator dan accessor sekarang, kita akan melanjutkan dan mengembangkan sebuah contoh nyata untuk menunjukkannya.
Saya berasumsi bahwa anda mengetahui model Eloquent di Laravel, dan kita akan menggunakan model Post sebagai titik awal dari contoh kita. Jika anda belum membuat model Post
, mari gunakan perintah artisan
untuk membuatnya.
1 |
php artisan make:model Post --migration
|
Itu seharusnya menciptakan file model di app/Post.php
seperti yang ditunjukkan di bawah ini.
1 |
<?php
|
2 |
|
3 |
namespace App; |
4 |
|
5 |
use Illuminate\Database\Eloquent\Model; |
6 |
|
7 |
class Post extends Model |
8 |
{
|
9 |
//
|
10 |
}
|
Mari kita ganti isi file itu dengan yang berikut ini.
1 |
<?php
|
2 |
namespace App; |
3 |
|
4 |
use Illuminate\Database\Eloquent\Model; |
5 |
|
6 |
class Post extends Model |
7 |
{
|
8 |
/**
|
9 |
* The attributes that should be mutated to dates.
|
10 |
*
|
11 |
* @var array
|
12 |
*/
|
13 |
protected $dates = [ |
14 |
'created_at', |
15 |
'updated_at', |
16 |
'published_at'
|
17 |
];
|
18 |
|
19 |
/**
|
20 |
* Get the post title.
|
21 |
*
|
22 |
* @param string $value
|
23 |
* @return string
|
24 |
*/
|
25 |
public function getNameAttribute($value) |
26 |
{
|
27 |
return ucfirst($value); |
28 |
}
|
29 |
|
30 |
/**
|
31 |
* Set the post title.
|
32 |
*
|
33 |
* @param string $value
|
34 |
* @return string
|
35 |
*/
|
36 |
public function setNameAttribute($value) |
37 |
{
|
38 |
$this->attributes['name'] = strtolower($value); |
39 |
}
|
40 |
}
|
Karena kita telah menggunakan pilihan migrasi--
, itu juga seharusnya membuat migrasi dengan database terkait. Hanya untuk berjaga-jaga anda secara tidak sadar, anda dapat menjalankan perintah berikut yang akan membuat sebuah tabel dalam database.
1 |
php artisan migrate |
Untuk menjalankan contoh dalam artikel ini, anda perlu membuat kolom name
dan published_at
dalam tabel post
. Lagi pula, kita tidak akan pergi ke rincian topik migrasi, sepertinya itu berada di luar lingkup artikel ini. Jadi kita akan kembali kepada metode yang kita tertarik di dalamnya.
Pertama, mari kita melalui metode mutator.
1 |
/**
|
2 |
* Set the post title.
|
3 |
*
|
4 |
* @param string $value
|
5 |
* @return string
|
6 |
*/
|
7 |
public function setNameAttribute($value) |
8 |
{
|
9 |
$this->attributes['name'] = strtolower($value); |
10 |
}
|
Seperti yang kita bahas sebelumnya, mutators digunakan untuk mengubah data sebelum disimpan ke database. Seperti yang Anda lihat, sintaks metode mutator adalah set{attribute-name}Attribute
. Tentu saja, anda perlu mengganti {attribute-name}
dengan nama atribut yang sebenarnya.
Metode setNameAttribute
dipanggil sebelum nilai atribut name
disimpan dalam database. Untuk menjaga hal-hal sederhana, kita hanya menggunakan fungsi strtolower
yang mengubah judul postingan menjadi huruf kecil sebelum disimpan ke database.
Dengan cara ini, anda dapat membuat metode mutator pada semua kolom tabel. Selanjutnya, mari kita melalui metode accessor.
Jika mutators digunakan untuk mengubah data sebelum disimpan ke dalam sebuah database, metode accessor digunakan untuk mengubah data setelah ia diambil dari database. Sintaks metode accessor sama seperti mutator kecuali itu dimulai dengan mendapatkan kata kunci bukan kata kuncinya yang ditetapkan.
Mari kita melalui metode accessor getNameAttribute
.
1 |
/**
|
2 |
* Get the post title.
|
3 |
*
|
4 |
* @param string $value
|
5 |
* @return string
|
6 |
*/
|
7 |
public function getNameAttribute($value) |
8 |
{
|
9 |
return ucfirst($value); |
10 |
}
|
Metode getNameAttribute
yang akan dipanggil setelah nilai atribut name diambil dari database. Dalam kasus kita, kita hanya menggunakan metode ucfirst
untuk mengubah judul postingan.
Dan itulah cara anda seharusnya untuk menggunakan metode accessor dalam model anda. Sejauh ini, kita hanya membuat metode mutator dan accessor, dan akan kita uji di bagian mendatang.
Mutator dalam Aksi
Mari buat sebuah kontroler di app/Http/Controllers/MutatorController.php
jadi kita bisa menguji metode mutator yang telah kita buat pada bagian sebelumnya
1 |
<?php
|
2 |
// app/Http/Controllers/MutatorController.php
|
3 |
namespace App\Http\Controllers; |
4 |
|
5 |
use App\Post; |
6 |
use App\Http\Controllers\Controller; |
7 |
|
8 |
class MutatorController extends Controller |
9 |
{
|
10 |
public function index() |
11 |
{
|
12 |
// create a new post object
|
13 |
$post = new Post; |
14 |
$post->setAttribute('name', 'Post title'); |
15 |
$post->save(); |
16 |
}
|
17 |
}
|
Juga, anda perlu untuk membuat sebuah rute terkait di file routes/web.php
untuk mengaksesnya
1 |
Route::get('mutator/index', 'MutatorController@index'); |
Di dalam metode index
, kita membuat postingan baru menggunakan model Post
. Ini seharusnya menetapkan nilai dari nama kolom untuk post title yang telah kita pakai fungsi strtolower
di metode mutator serNameAttribute
Dare Mutator
Selain mutator yang telah kita bahas sebelumnya, model Eloquent menyediakan beberapa mutator khusus yang memungkinkan anda untuk mengubah data. Misalnya, model Eloquent di Laravel hadir dengan properti khusus $dates
yang memungkinkan Anda mengonversi kolom yang dikehendaki secara otomatis ke sebuah sebuah Carbon
date.
Pada awal artikel ini, kita telah membuat model Post
, dan kode berikut adalah bagian dari class tersebut.
1 |
...
|
2 |
...
|
3 |
/**
|
4 |
* The attributes that should be mutated to dates.
|
5 |
*
|
6 |
* @var array
|
7 |
*/
|
8 |
protected $dates = [ |
9 |
'created_at', |
10 |
'updated_at', |
11 |
'published_at'
|
12 |
];
|
13 |
...
|
14 |
...
|
Seperti yang mungkin anda ketahui, Laravel selalu menciptakan dua field yang berkaitan dengan tanggal, created_at
dan updated_at
, dengan setiap migrasi database. Dan itu mengubah nilai tersebut menjadi sebuah contoh Carbon
date.
Mari berasumsi bahwa anda memiliki sepasang field di sebuah tabel yang anda anggap sebagai date fields. Dalam hal ini, anda hanya perlu untuk menambahkan nama kolom di array $dates
Seperti yang anda lihat pada kode di atas, kita telah menambahkan published_at
di kolom array $dates
, dan memastikan nilai dari kolom akan dikonversi ke sebuah contoh Carbon
date
Accessor dalam Aksi
Untuk melihat accessor sedang beraksi, mari kita lanjutkan dan membuat sebuah file kontroler app/Http/Controllers/AccessorController.php
dengan isi berikut
1 |
<?php
|
2 |
namespace App\Http\Controllers; |
3 |
|
4 |
use App\Post; |
5 |
use App\Http\Controllers\Controller; |
6 |
|
7 |
class AccessorController extends Controller |
8 |
{
|
9 |
public function index() |
10 |
{
|
11 |
// load post
|
12 |
$post = Post::find(1); |
13 |
|
14 |
// check the name property
|
15 |
echo $post->name; |
16 |
|
17 |
// check the date property
|
18 |
echo $post->published_at; |
19 |
|
20 |
// as we've mutated the published_at column as Carbon date, we can use following as well
|
21 |
echo $post->published_at->getTimestamp(); |
22 |
exit; |
23 |
}
|
24 |
}
|
Juga, mari kita buat sebuah rute yang terkait di file routes/web.php
untuk mengaksesnya
1 |
Route::get('accessor/index', 'AccessorController@index'); |
Dalam metode index
, kita telah menggunakan model Post
untuk memuat sebuah contoh post di tempat pertama.
Selanjutnya, kita memeriksa nilai kolom nama, dan itu harus dimulai dengan huruf besar karena kita telah menentukan metode accessor getNameAttribute
untuk kolom itu.
Selanjutnya, kita telah memeriksa nilai kolom publish
_at
, dan itu harus dianggap sebagai tanggal. Karena itu, Laravel mengubahnya menjadi contoh Carbon sehingga anda dapat menggunakan semua metode utilitas yang disediakan oleh library itu. Dalam kasus kita, kita telah menggunakan metode getTimestamp
untuk mengubah tanggal menjadi stempel waktu.
Dan itu membawa kita ke akhir artikel ini!
Kesimpulan
Hari ini, kita telah mengeksplorasi konsep mutator dan accessor ORM Eloquent di Laravel. Ini memberikan cara yang bagus untuk mengubah data sebelum disimpan dan diambil dari database.
Bagi anda yang baru saja memulai dengan Laravel atau ingin memperluas pengetahuan, situs, atau aplikasi dengan ekstensi, kami memiliki berbagai hal yang dapat anda pelajari di Envato Market.
Jangan ragu untuk berbagi pemikiran menggunakan feed di bawah ini!