Categories
Code

Laravel Artisan Console, Membuat Aplikasi CLI

Ketika kamu membutuhkan antarmuka command-line (command-line interface / CLI), kamu dapat memanfaatkan fitur Artisan Console. Laravel menyediakan sejumlah perintah Artisan dengan menggunakan memanggil perintah list

php artisan list

Untuk menambahkan perintah Artisan, dapat dibuat dengan perintah make:command. Kita akan membuat sebuah perintah Artisan untuk menampilkan kota seperti pada contoh sebelumnya:

php artisan make:command ViewCities

File perintah Artisan tersebut disimpan di app\Console\ViewCities.php.

<?php
namespace App\Console\Commands;

use Illuminate\Console\Command;

class ViewCities extends Command
{

    protected $signature = 'city:view';

    protected $description = 'View cities';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        //
    }
}

Isikan variabel $signature dengan nama perintah Artisan dan masukkan deskripsinya di variabel $description.

Baris-baris kode yang ada di method handle() akan dieksekusi saat perintah Artisan yang dibuat dijalankan. Berikut contoh kode untuk menampilkan daftar kota:

public function handle()
{
    $this->info("Daftar Kota");

    $cities = \App\City::all();
    foreach ($cities as $city) {
        $this->line("- {$city->name}: {$city->map}");
    }
}

Agar perintah Artisan dapat digunakan, masukkan class tersebut ke dalam variabel $commands yang ada di file app/Console/Kernel.php

protected $commands = [
        ...
        Commands\ViewCities::class
    ];

Panggil perintah artisan tersebut dengan perintah:

  php artisan city:view

Berikut kode lengkap:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class ViewCities extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'city:view';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'View cities';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->info("Daftar Kota");

        $cities = \App\City::all();
        foreach ($cities as $city) {
            $this->line("- {$city->name}: {$city->map}");
        }
    }
}
Categories
Code

Eloquent ORM di Laravel, Membuat Model Aplikasi

Laravel menyediakan cara mudah dalam mengakses database yaitu Eloquent ORM (Object Relational Model), sebuah implementasi ActiveRecord ketika bekerja dengan database. Setiap tabel database memiliki hubungan dengan model yang digunakan untuk berinteraksi dengan tabel tersebut.

Pada tulisan sebelumnya, kita sudah memiliki tabel dalam database yang dibuat melalui migration bernama cities dan memasukkan data dummy ke dalam tabel tersebut. Tulisan ini akan melanjutkan pemodelan data yang dihubungkan dengan tabel dan data di dalamnya.

Model aplikasi mengijinkan untuk query data di dalam tabel, serta menambahkan, mengubah atau menghapus data tersebut. Tulisan kali ini akan membahas cara membuat model, bagaimana ketentuan dalam model dan mengambil data (query) yang akan ditampilkan ke laman web.

Membuat Model

Membuat model dapat dilakukan dengan menggunakan perintah Artisan make:model. Model yang akan dibuat bernama City dan dihubungkan ke tabel cities yang terdapat di database.

$ php artisan make:model City

Dalam pembuatan model, migration dapat dibuat secara otomatis dibuat dengan menyertakan opsi --migration atau disingkat -m. Berikut perintah pembuatan model beserta migration:

$ php artisan make:model City --migration
$ php artisan make:model City -m
Model created successfully.
Created Migration: 2019_03_17_005308_create_cities_table

Model yang dibuat dengan perintah Artisan di atas akan disimpan di file app/City.php, berikut isi file model City:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class City extends Model
{
    
}

Ketentuan Pemodelan

Eloquent menganggap bahwa kelas model City secara otomatis terhubung dengan tabel cities, bentuk jamak dari nama kelas tersebut. Begitu pula ketika model User dibuat, maka diasumsikan terdapat tabel users di database yang dihubungkan dengan model tersebut. Keterkaitan model dengan tabel database tersebut dapat didefinisikan secara manual dengan melalui properti $table:

class City extends Model
{
    protected $table = 'tbl_city';    
}

Selain nama tabel, Eloquent juga menganggap bahwa setiap tabel memiliki kolom bernama id sebagai primary key. Gunakan properti $primaryKey jika ingin menggunakan nama kolom lain sebagai primary key tabel:

class City extends Model
{
    ...
    protected $primaryKey = 'city_ID';    
}

Elequent juga memiliki 2 kolom timestamp yang selalu ada di model yaitu created_at dan updated_at. Jika tidak menginginkan keberadaan kolom timestamp ini, set properti $timestamps menjadi false.

class City extends Model
{
    ...
    protected $timestamps = false;
}

Sama seperti pada tulisan sebelumnya membuat migration database, struktur tabel cities ketika dibuat menggunakan schema builder adalah sebagai berikut:

Schema::create('cities', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('map');
    $table->timestamps();
});

Masukkan data dummy dengan menggunakan seeder database, dan query data tersebut pada model dengan query builder. Sebagai contoh memanggil semua data dengan metode all():

App\City::all();

Untuk memastikan model berjalan dengan baik dengan memanggil metode di atas untuk ditampilkan ke dalam view seperti di bawah ini:

...
<h1>Daftar Kota Jabodetabek</h1>
@php $cities = App\City::all(); @endphp
<ul class="list-group">
    @foreach ($cities as $city)
    <li class="list-group-item">
        <a href="{{ $city->map }}" target="_blank">
            {{ $city->name }}
        </a>
    </li>
    @endforeach
</ul>
...

Hubungan antar Tabel

Tabel-tabel di database sering kali berhubungan satu sama lain. Sebagai contoh tabel People yang berisikan data penduduk berhubungan dengan tabel Cities.

Eloquent memudahkan mengelola hubungan antar tabel tersebut dan mendukung berbagai jenis hubungan. Untuk mempermudah pemahaman tentang relasi, sekarang kita buat model seorang penduduk yaitu model Person (bentuk tunggal dari People) yang berelasi dengan model City.

$ php artisan make:model Person -m
Model created successfully.
Created Migration: 2019_03_17_072450_create_people_table

Dari perintah di atas, dibuat secara otomatis migration tabel people, buat struktur tabel sebagai berikut:

Schema::create('people', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('city_id');
    $table->string('name');
    $table->string('age');
    $table->timestamps();
    $table->foreign('city_id')->references('id')->on('cities');
});

Dari struktur di atas dapat kita lihat bahwa terdapat field city_id sebagai foreign key yang berelasi dengan tabel cities. Jika dimodelkan, hubungan ini termasuk ke dalam tipe one-to-many, di mana City dapat mempunyai banyak data Person. Berikut kode pemodelan yang dilakukan di model City:

class City extends Model
{
    public function people()
    {
        return $this->hasMany('App\Person');
    }
}

Begitu pula di model Person yang mempunyai hubungan terbalik dengan model City di definisikan sebagai berikut:

class Person extends Model
{
    public function city()
    {
        return $this->belongsTo('App\City');
    }
}

Setelah hubungan dipetakan, kita dapat mengakses koleksi data Person dengan mengakses properti people

$people = App\City::find(1)->people;

foreach ($people as $person) {
    //
}

Kode Github

Categories
Code

Membuat Data Dummy di Laravel dengan Seeder

UPDATE 12 Maret 2019: Tulisan ini diupdate menggunakan Laravel 5.8

Ketika mengembangkan aplikasi, kita butuh data dummy di masukkan ke database untuk melakukan pengujian bahwa proses aplikasi yang sedang dibangun telah berjalan dengan baik. Laravel menyertakan metode sederhana dalam melakukan hal tersebut dengan fitur Database Seeding.

Kita ambil contoh dari skema database yang telah dibuat pada tulisan sebelumnya, kita akan memasukkan data kota pada tabel cities.

Menulis Seeder

Untuk menghasilkan sebuah seeder, gunakan perintah Artisan make:seeder berikut:

php artisan make:seeder CityTableSeeder

Kelas seeder CityTableSeeder yang dihasilkan akan disimpan di direktori database/seeds. Di dalam kelas seeder terdapat metode run() yang di dalamnya dapat dimasukkan proses menambahkan data ke tabel. Buka file database/seeds/CityTableSeeder dan masukkan proses menambahkan data berikut:

public function run() {
    $cities = [
        ['name' => 'Jakarta', 'map' => 'https://goo.gl/maps/ugdFU'],
        ['name' => 'Bogor', 'map' => 'https://goo.gl/maps/ExzYT'],
        ['name' => 'Depok', 'map' => 'https://goo.gl/maps/30JxC'],
        ['name' => 'Tangerang', 'map' => 'https://goo.gl/maps/Yn0yZ'],
        ['name' => 'Bekasi', 'map' => 'https://goo.gl/maps/T17QQ']
    ];

    DB::table('cities')->insert($cities);
}

Proses penambahan data di atas menggunakan query builder yang disediakan Laravel.

Menjalankan Seeder

Laravel menyertakan kelas DatabaseSeeder yang dijalankan dengan perintah Artisan db:seed. Masukkan Kelas seeder yang ingin dijalankan dengan memanggil metode call(). Berikut isi metode run() yang berisikan kelas-kelas seeder yang dipanggil:

public function run()
{
    $this->call(CityTableSeeder::class);
}

Berikut perintah untuk menjalankan seeder:

php artisan db:seed

Selain menjalan seed yang dipanggil dari kelas DatabaseSeeder, kelas seeder tersendiri dapat dipanggil langsung dari perintah Artisan db:seed dengan menyertakan opsi –class:

php artisan db:seed --class=CityTableSeeder

Kode Github

Categories
Code

Database Migration pada Laravel, Version Control untuk Database

UPDATE 7 Maret 2019: Tulisan ini diupdate menggunakan Laravel 5.8

Kamu bekerja dalam tim pengembangan dan menginginkan skema database tetap terbaru meskipun teman satu tim lain melakukan perubahan? Ya, kamu bisa menggunakan fitur Database Migration pada Laravel untuk meyakinkan bahwa tim pengembang mempunyai skema database terbaru. Fitur ini mirip dengan version control untuk database.

Pada tulisan kali ini, kita akan membuat sebuah migration database dengan nama skema cities (bentuk data mirip dengan tutorial sebelumnya: Memulai Laravel PHP, Membuat Aplikasi Daftar Kota). Migration biasanya dipasangkan dengan fitur schema builder Laravel, sehingga di dalam menulis migration menggunakan schema builder yang digunakan untuk membangun skema database aplikasi.

Menghasilkan Kelas Migration

Untuk menghasilkan kode migrasi, kamu dapat menggunakan perintah Artisan make:migration. Berikut adalah contoh perintah membuat tabel cities:

php artisan make:migration create_cities_table

Setelah perintah tersebut dijalankan, output yang dihasilkan sebagai berikut:

Created Migration: 2019_03_07_040935_create_cities_table

Laravel menyimpan kode migration pada direktori database/migrations dan secara otomatis diberikan timestamp pada nama file yang memungkinkan Laravel untuk menentukan urutan migration. Lokasi migration dari contoh di atas adalah database/migrations/2019_03_07_040935_create_cities_table.

Berikut kode yang dihasilkan dari membuat migration yang telah dilakukan:

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCitiesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('cities', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('cities');
    }
}

Struktur Migration

Kelas migration berisikan dua metode yaitu up() dan down(). Metode up() digunakan untuk menambahkan tabel baru, kolom dan indeks ke dalam database. Sedangkan metode down() mengembalikan operasi (rollback) yang telah dijalankan oleh method up().

Kita masukkan kode schema builder untuk membuat tabel cities di metode up():

public function up()
{
    Schema::create('cities', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('map');
        $table->timestamps();
    });
}

Sedangkan metode down() berisikan kode schema builder untuk menghapus tabel cities:

public function down()
{
    Schema::dropIfExists('cities');
}

Menjalankan Migration

Untuk menjalankan semua migration yang belum dijalankan menggunakan perintah berikut:

php artisan migrate

Sebelum menjalankan migrasi, pastikan koneksi database telah diatur melalui file .env:

...
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=password
...

Ketika perintah Artisan di atas dijalankan, skrip yang berada di dalam metode run() yang akan dijalankan. Perlu diperhatikan bahwa jika mendapatkan error “class not found”, coba jalankan perintah:

composer dump-autoload

Mengembalikan Migration

Untuk mengembalikan operasi migration terakhir dapat menggunakan perintah Artisan migrate:rollback.

php artisan migrate:rollback

Perlu dicatat bahwa semua file migration (batch) terakhir yang telah dijalankan akan dikembalikan, metode down() yang dijalankan. Untuk mengembalikan (rolling back) semua migration pada aplikasi, menggunakan perintah Artisan migrate:reset.

php artisan migrate:reset

Kode Github

Categories
Code

Memulai Laravel PHP, Membuat Aplikasi Daftar Kota

UPDATE 6 Maret 2019: Tulisan ini diupdate menggunakan Laravel 5.8. Klik di sini untuk mengetahui sistem yang dibutuhkan oleh Laravel 5.8.

Aplikasi akan memunculkan halaman web yang berisikan daftar kota sekitar Jakarta yang dikenal dengan Jabodetabek. Setiap item kota terdapat link yang mengarah ke lokasi peta kota tersebut. Langkah pembuatan aplikasi mulai dari instalasi Laravel, membuat routing dan view, sampai dengan hasil akhir dijalankan di web browser.

Instalasi Laravel

Laravel (http://laravel.com) menggunakan Composer (https://getcomposer.org) untuk instalasi dan pengelolaan dependency, pastikan Composer telah terinstal di komputer. Jika belum, instalasi dapat dilakukan melalui terminal (pada sistem operasi berbasis *nix):

curl -sS https://getcomposer.org/installer | php

Jika kamu menggunakan Windows, installer Composer dapat diunduh melalui https://getcomposer.org/Composer-Setup.exe. Informasi unduh Composer dapat dilihat langsung dari https://getcomposer.org/download/.