Digitalmapia adalah situs dimana semua orang bisa menulis artikelnya sendiri. Klik "Login/Register untuk masuk, lalu klik "Tulis Artikel" untuk mulai menulis.

Membuat CRUD Sederhana pada Laravel : part 1

Pada tulisan sebelumnya saya telah membahas beberapa hal sebagai berikut:

Setelah anda membaca tentang apa itu Laravel, cara membuat ‘Hello World’, migration dan seeding, Kali ini, kita akan membahas mengenai cara membuat aplikasi CRUD sederhana dengan menggunakan Laravel. Artikel kali ini dibuat sesederhana yang saya bisa, sehingga mudah dipelajari oleh pemula sekalipun.

Twitter Bootstrap

Untuk membuat user interface, kita akan menggunakan bantuan Twitter Bootstrap. Untuk itu, silahkan unduh terlebih dahulu disini. Kemudian extract hasil unduhan anda. Setelah di-extract akan menemukan tiga folder didalamnya yaitu folder css, fonts dan js. Copy ketiga folder tersebut ke dalam direktori `public`-nya Laravel.

Bootstrap di dalam direktori publik laravel

Bootstrap di dalam direktori publik laravel

Setelah Twitter Bootstrap anda pindahkan ke direktori public, berarti sudah siap untuk digunakan pada aplikasi Laravel yang akan kita buat. Oleh karena itu, marilah kita lupakan sejenak mengenai Twitter Bootstrap ini dan memulai langkah selanjutnya.

Database Tabel

Sekarang, marilah kita membuat sebuah tabel baru untuk menampung data yang akan kita gunakan dalam tutorial kali ini. Misalnya, tabel tersebut akan menampung data-data buku yang akan dijual. Dengan menggunakan command-line, jalankan perintah php artisan migrate:make create_books_table. Maka, secara otomatis akan tercipta sebuah file baru pada direktori app/database/migrations. Buat definisi tabel sebagai berikut pada file migrasi tersebut:

<?php use Illuminate\Database\Migrations\Migration;

class CreateBooksTable extends Migration {

   public function up()  {

      Schema::create('books', function($table){
         $table->increments('id');
         $table->string('title')->unique();
         $table->string('author');
         $table->string('description');
         $table->string('price');
         $table->timestamps();
      });

 }

 public function down()
 {
     Schema::drop('books');
 }

}

?>

Lalu jalankan perintah php artisan migrate melalui command-line. Maka secara otomatis akan tercipta sebuah tabel baru bernama `books`, anda bisa melihatnya melalui phpmyadmin.

CRUD

CRUD merupakan singkatan dari Create, Read, Update dan Delete. Untuk itu mari kita bahas satu persatu mulai dari Create (memasukan data ke dalam database).

Create

Untuk memasukan data ke dalam database kita akan menggunakan sebuah form. Pertama-tama, buat sebuah file baru pada direktori app/views/ dengan nama layout.blade.php. Kemudian, pada file tersebut, buat layout HTML sebagai berikut:

<!DOCTYPE html>
<html lang='en'>
<head>
 <meta charset='utf-8' />
 <title>CRUD App</title>

<meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1' />
 {{ HTML::style('css/bootstrap.min.css') }}

</head>;
<body>

@yield('content')

{{ HTML::script('js/jquery.min.js') }}
{{ HTML::script('js/bootstrap.js') }}

</body>
</html>

Perhatikan bahwa Laravel menggunakan Blade sebagai templating engine. Apabila anda masih belum mengerti tentang Blade, tidak masalah. Blade adalah sesuatu yang mudah, anda akan mengerti setelah menyelesaikan tutorial ini.

Selanjutnya, masih pada folder app/views, buat sebuah file baru bernama newbook.blade.php:

@extends('layout')

@section('content')
  Hello, Semua form akan ditempatkan disini!
@stop

File inilah yang nantinya akan digunakan untuk menampilkan form yang akan kita buat pada browser. Pada file tersebut anda tidak perlu menulis lagi tag `html`, `title` , `body` karena sudah di-extends dari file layout.blade.php dengan menggunakan @extends('layout'). Semua yang akan ditampilkan di browser bisa anda simpan diantara @section('content') dan @stop.

Selanjutnya, tambahkan definisi form pada file tersebut:

@extends('layout')

@section('content')

<div class='container'>

<h3>Insert new book</h3>

 {{ Form::open()}}

 {{Form::label('title', 'Title') }}

 {{Form::text('title', '', array('class' => 'form-control'))}}

 {{Form::label('author', 'Author') }}

 {{Form::text('author', '', array('class' => 'form-control'))}}

 {{Form::label('description', 'Description') }}

 {{Form::textarea('description', '', array('class' => 'form-control'))}}

 {{Form::label('price', 'Price') }}

 {{Form::text('price', '', array('class' => 'form-control'))}}

 {{Form::submit('Submit', array('class' => 'btn btn-primary')) }}

 {{ Form::close() }}

 </div>

 @stop

Lalu, buat sebuah route pada file app/routes.php :

Route::get('newbook', function()
{
 return View::make('newbook');
});

Akses route tersebut melalui browser, maka akan tampil form seperti berikut ini:

insert form

Insert form

Memasukan data ke database

Selanjutnya, mari kita buat Model dan Controller untuk memasukan data diinputkan ke dalam database. Buat sebuah file dengan nama Book.php pada direktori app/models:

<?php class Book extends Eloquent { }  ?>

Harus diperhatikan bahwa nama class perlu disesuaikan dengan nama tabel yang digunakan, karena pada contoh kali ini kita menggunakan tabel bernama books, maka nama class yang dibuat haruslah Book. Seperti halnya pada Model User, karena nama tabelnya users. Sebenarnya, anda juga bisa menentukan nama Model sesuka hati. Namun, caranya tidak akan dibahas pada tulisan ini. Mungkin lain kali akan saya bahas.

Ok, setelah Model anda buat, selanjutnya mari kita buat controller. Pada direktori app/controllers buatlah sebuah file baru dengan nama BookController.php :

<?php

class BookController extends BaseController {
 }

?>

Setelah itu, buat fungsi untuk memasukan data buku baru ke dalam database:

<?php

class BookController extends BaseController {
  public function store(){

    $book = new Book;

    $book->title       = Input::get('title');;
    $book->author      = Input::get('author');;
    $book->description = Input::get('description');;
    $book->price       = Input::get('price');;

    $book->save();

  }
}

?>

Bagian Terakhir

Ok, setelah Model dan Controller dibuat, langkah selanjutnya yang harus dilakukan adalah membuat route baru yang mengarah kepada fungsi yang kita buat di dalam Controller. Buka routes.php, tambahkan route sebagai berikut:

Route::post('book/insert', 'BookController@store');

Kemudian pada file app/views/newbook.blade.php ubah {{ Form::open() }} menjadi {{ Form::open(array('action' => 'BookController@store')) }}. Dimana ‘BookController@store’ disesuaikan dengan nama Controller dan Action yang kita tuju.

Selesai. Anda sekarang bisa mencobanya dengan memasukan data pada form kemudian tekan tombol submit. Lalu, cek di database apakah data yang diinputkan sudah masuk.

Konklusi

Diatas kita telah membahas mengenai membuat Create menggunakan Laravel. Yaitu dengan cara membuat Model, Kemudian membuat View yang bisa mengirim data melalui form, data pada form tersebut kemudian dikirim ke controller untuk disimpan ke dalam database dengan menggunakan Class Model yang telah dibuat. Selanjutnya, pada Part 2 kita akan membahas mengenai cara menampilkan data (Read).

Let’s Go

Laravel Wallpapper
  • ALTEZZA EXEL

    Saya sudah coba membuat CRUD dengan cara seperti diatas, hanya saja ada perbedaan :

    1. DB saya pake MSSQL 2005 (koneksi sudah saya set dan berhasil)

    2. Saya buat tabel Pengguna yg strukturnya: ID, username, pwd, created_at, updated_at.

    Saya sudah coba cara diatas, form sudah tampil, tapi saat di submit muncul eror :

    HttpKernel Exception NotFoundHttpException

    Kira2 apa yg salah ya?

    • digitalmapia

      Pada file app/views/newbook.blade.php , {{ Form::open() }} sudah diubah menjadi {{ Form::open(array(‘action’ => ‘BookController@store’)) }}?atau belum?

      • ALTEZZA EXEL

        Sudah mas/mbak. Cuman tetep saja error, dan data tidak masuk ke tabel pada database. Kira2 apanya yg salah?

        • ALTEZZA EXEL

          Eh koreksi. Sudah bisa deng… Terima kasih.

          • http://digitalmapia.com/ digitalmapia

            Sama-sama 😀

  • fursandy anggita

    setelah menjalankan perintah php artisan migrate dan saya cek di phpmyadmin databasenya kog gak ada ya ?

    muncul tulisan ginian di command prompt

    [PDOException]
    SQLSTATE[HY000] [1049] Unknown database ‘database’

    migrate [–bench[=”…”]] [–database[=”…”]] [–path[=”…”]] [–package[=”…
    “]] [–pretend] [–seed]

    • http://digitalmapia.com/ digitalmapia

      Cek, konfigurasi databasenya gan, pada file app/config/database.php. pastikan database bernama nama database, username, password sudah di setting.

      • fursandy anggita

        sudah saya setting sepert ini

        ‘mysql’ => array(
        ‘driver’ => ‘mysql’,
        ‘host’ => ‘localhost’,
        ‘database’ => ‘database’,
        ‘username’ => ‘root’,
        ‘password’ => ‘1234’,
        ‘charset’ => ‘utf8′,
        ‘collation’ => ‘utf8_unicode_ci’,
        ‘prefix’ => ”,

        kira” apa yg salah gan ?

        • http://digitalmapia.com/ digitalmapia

          Owh jadi database-nya belum dibuat ya? dibikin dulu gan…

          • fursandy anggita

            hehe iya gan udah bisa, makasih

  • Rizky Maulana

    # gan klo untuk tipe data tiny int gimana ya? udh di coba, gak bisa di migrate.

    increments(‘id’);
    $table->string(‘title’)->unique();
    $table->string(‘author’);
    $table->string(‘description’);
    $table->string(‘price’);
    $table->timestamps();
    });

    }

    public function down()
    {
    Schema::drop(‘books’);
    }

    }

    ?>

  • http://kiper.co.id Hasan Setiawan

    Thanks sob artikelnya bermanfaat, silahkan di cek sob aplikasi akunting buatan anak Indonesia yang gak kalah keren ama buatan luar di kiper.co.id

  • joe

    gan, ada solusi dengan permasalahan seperti ini”
    Symfony
    Component
    HttpKernel
    Exception
    NotFoundHttpException” padahal semuanya udh benar.

    • http://digitalmapia.com/ digitalmapia

      Kalo not found gitu biasanya route belum dibuat. Coba cek di routes.php apakah url yang dimaksud sudah ada. Perhatikan pula get dan post-nya gan… 😀

      Untuk menu submit halaman biasanya pake route::post(); kalau yang nampilian pake route::get();
      agan bisa cek disini buat belajar tentang routing: http://digitalmapia.com/bekerja-dengan-routing-pada-laravel/

      • joe

        gan, knp data yang saya masukkan di ada di database??

  • miruza annas

    gan untuk buat tabel record pada frame yang udah di buat bagaimana ya ?

  • Dibya Prabo

    Bagaimana jika saat execute di cmd “php artisan migrate” mysql server saya ada passwordnya??? ini tidak berhasil jika localhost saya ada passwordnya. Mohon bimbingannya Om..

    • http://digitalmapia.com/ digitalmapia

      Setup dulu username sama password-nya di app/config/database.php gan… 😀

  • RPL4rt

    sangat membantu.. thx.. 😀

  • Agustian

    CSS nya gak kebaca ya..

  • Trisnayadi Hendra

    bagaimana cara setting nama databasenya ?

    • http://digitalmapia.com/ digitalmapia

      app/config/database.php

  • Trisnayadi Hendra

    saat saya tekan submit kok muncul “Error in exception handler.”? knapa ya??

  • Heri Setiawan

    Mas mau tanya kenapa ya saat saya submit muncul pesan “The requested URL /cobalaravel/public/book/insert was not found on this server”

  • oij

    waw

  • ilham

    Pas di CMD kok yang keluar Could not open input file: artisan ? kenapa ya ?

  • Mohamad Mansur