Dengan sedikit santai, kita akan mencoba berkenalan dan bermain bersama model yang terdapat pada laravel. Tapi pada kesempatan kali ini, anda tidak akan mendapatkan penjelasan secara teknis dan detail tentang model dalam konsep MVC Pattern. Penjelasan sederhananya adalah bahwa model bertanggung jawab dalam hal interaksi dengan database.
Kita telah memiliki model User yang secara default sudah disediakan oleh laravel, yang memungkinkan kita untuk menambahkan records kedalam table users di database. Dan pada artikel kali ini kita tidak akan belajar hal-hal yang rumit serta kegunaan model secara mendetail, akan tetapi kita akan belajar bagaimana cara membuatnya dan juga bagaimana cara kerjanya.
Berinteraksi dengan model
Tiba saatnya untuk membuat model pada laravel, silahkan jalankan perintah dibawah ini pada command line :
php artisan make:model Post -m
Kita telah membuat sebuah model yang diberinama Post, yang hanya merupakan nama generic yang sebenarnya dapat mewakili apapun. Anda dapat melihat, kita menambahkan flag -m, yang sekaligus akan membuat migration bersamaan dengan model. Dan tentu hal tersebut sangat efisien dalam lingkup kerja.
Setelah menjalankan command tersebut, anda akan mendapatkan konfirmasi dua buah file telah dibuat, seperti berikut :
Karena tidak ada folder model pada laravel, maka Post.php akan ditempatkan kedalam app folder. Anda dapat menemukannya bersama dengan User model
Buka file model Post.php maka akan terlihat seperti ini :
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
//
}
Mungkin saat pertama kali melihat potongan kode diatas, kita akan berfikiran ini hanya kerangka dasar sebuah class, tapi ternyata tidak demikian. Sebagian besar logika model diekstrak kedalam framework, sehingga membuatnya bekerja dengan mudah dan lebih rapi. Kita akan menambahkan dari apa yang anda lihat disini tapi sebagian besar telah tersedia untuk digunakan dengan implementasi Active Record.
Laravel memiliki nama untuk Active Records implementation. Dengan sebutan Eloquent dan ini akan memberikan kita syntax yang sangat intuitif untuk melakukan tugas yang berhubungan dengan DB. Kita akan melihat penggunaannya nanti.
Untuk sekarang, silahkan buka file lainnya yang telah dibuat, yakni migration. Anda dapat menemukannya di database/migrations dan akan telihat seperti ini :
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
Anda dapat melihat bahwa artisan telah melakukan cukup banyak pekerjaan untuk kita. Posts adalah nama table yang di set dari hasil generate sebelumnya dengan artisan, plural (bersifat jamak) tentunya. Konvensi singular untuk model, plural untuk nama tablenya. Juga memberikan kita sebuah id column yang auto-increment dan sebuah method yang akan membuat created_at dan updated_at dengan tipe datetime columns.
Anda juga dapat melihat down method untuk melakukan drop table:
Schema::dropIfExists('posts');
Selanjutnya, jika kita ingin menambahkan field / column lainnya, cukup tambahkan pada up method, semisal kali ini kita akan menambahkan field title :
$table->string('title');
ketika anda menggunakan string method, secara default menggunakan varchar column dengan nilai 255 characters, jadi ketika anda melakukan migrated dengan type column ini maka akan terlihat seperti ini :
varchar(255)
Tentunya anda dapat membuatnya secara spesifik sesuai dengan berapa banyak characters yang anda inginkan dengan menambahkan argumen kedua. Maka akan menjadi seperti ini :
$table->string('title', 60);
jadi dalam hal ini kita membatasinya dengan 60 characters. Jadi sekarang, up method anda akan terlihat seperti ini :
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title', 60);
$table->timestamps();
});
}
Saatnya untuk melakukan migration, dari command line ketikkan command berikut :
php artisan migrate
dan kita telah memiliki posts table. Anda dapat mengeceknya pada PhpMyAdmin:
Sekarang buka Post model yang terletak di app/Post.php.
Dan apabila kita ingin menambahkan sebuah records ke posts table, kita perlu menambahkn property ke Post model :
protected $fillable = ['title'];
Hal ini akan memberitahu Eloquent bahwa ini adalah mass assinable property, dan jika kita tidak menambahkan property tersebut, Laravel Eloquent tidak akan mengizinkan untuk menyimpan records apapun. Anda harus menambahkan ke fillable array setiap kali anda membuat kolom baru / field baru ke dalam table yang anda inginkan untuk melakukan penyimanan data. Perlu diperhatikan bahwa kita tidak perlu menambahkan id karena telah menggunakan auto-increment dan juga kita tidak perlu menambahkan timestamps, karena secara default telah ditangani oleh model.
Cukup sekian kita bermain dengan model yang juga telah ditemani oleh migration, untuk penggunaan model lebih lanjut lagi akan kita bahas pada artikel selanjutnya. Semoga bermanfaat.
Comments