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 3

Pada Tulisan sebelumnya kita telah membahas tentang Create dan Read. Sekarang, mari kita melangkah ke tahap selanjutnya, yaitu Update. Pertama-tama, kita akan menampilkan link edit pada tabel yang telah kita buat sebelumnya ketika menampilkan data. Ubah file  listbook.blade.php menjadi sebagai berikut:

@extends('layout')

@section('content')
<section class="container">
 <table class="table">
    <tr>
       <th>Title</th>
       <th>Author</th>
       <th>Description</th>
       <th>Price</th>
       <th>#</th>
    </tr>
    @foreach($booksdata as $book)
      <tr>
         <td>{{ $book->title }}</td>
         <td>{{ $book->author }}</td>
         <td>{{ $book->description }}</td>
         <td>{{ $book->price }}</td>
         <td>{{ link_to_action('BookController@edit', 'edit', array($book->id))}}</td>
      </tr>
    @endforeach
 </table>
</section>
@stop

Pada kode diatas, kita menambahkan link_to_action yang merupakan helper untuk membuat HTML link. Dimana, link tersebut akan mengarah ke method edit pada controller bernama BookController. Jika anda jalankan di browser (dengan membuka route booklist), maka akan muncul error sebagai berikut:

ErrorException
Route [BookController@edit] not defined. (View: /var/www/laravel/app/views/listbook.blade.php)

Error tersebut muncul karena kita belum membuat route yang mengarah ke method tersebut, disamping method itu sendiri belum kita buat. Untuk itu, tambahkan route sebagai berikut pada file routes.php :

Route::get('book/edit/{id}', 'BookController@edit');

Kemudian, tambahkan action “edit” pada BookController:

public function edit($id)
{
  # code...
}

Jika, anda klik pada salah satu link yang ditampilkan pada tabel, maka akan muncul halaman kosong pada browser. Untuk mengubah halaman kosong tersebut menjadi halaman edit, ubah fungsi edit yang barusan kita tambahkan menjadi sebagai berikut:

public function edit($id)
{
   $book = Book::find($id);
   return View::make('editbook')->with('book', $book);
}

Jika, anda jalankan lagi maka kali ini bukan halaman kosong yang anda dapatkan, tetapi anda akan melihat error sebagai berikut:

InvalidArgumentException
View [editbook] not found.

Ini dikarenakan kita belum membuat view bernama editbook. Untuk itu, pada folder app/views buatlah file baru dengan nama editbook.blade.php :

@extends('layout')

@section('content')

<div class='container'>

<h3>Edit book</h3>

 {{ Form::open() }}

 {{Form::hidden('id', $book->id)}}

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

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

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

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

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

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

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

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

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

 {{ Form::close() }}

 </div>

 @stop

Reload halaman yang menampilkan error tersebut dan anda akan melihat form edit beserta nilai dari masing-masing field.

Update

Untuk melakukan update, tambahkan fungsi ‘update’ pada BookController:

 public function update()
 {
     $id   = Input::get('id');
     $book = Book::find($id);

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

     $book->save();
 }

Dan, jangan lupa untuk menambahkan route baru sebagai berikut:

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

Setelah itu, pada file editbook.blade.php, ubahlah

 {{ Form::open()) }}

menjadi

 {{ Form::open(array('action' => 'BookController@update')) }}

Sekarang, cobalah anda ubah judul dari buku tersebut, lalu klik tombol update. Maka, data judul buku tersebut akan berubah pula di database.

Laravel Wallpapper
  • miruza annas

    gan, ID itu Ident ygan kita buat ya ?
    ane dapet eror begini ni

    Illuminate Database QueryException

    SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘id’ in ‘where clause’ (SQL: select * from `t_sheds` where `id` = 1 limit 1)

    ini begimana gan ?

  • Guest

    ini begimana ya gan ngesolve nya ?

  • miruza annas

    ini begimana ya gan, benerinnya

    • http://digitalmapia.com/ digitalmapia

      Itu kolom id-nya ada gak gan di database? 😀

      • miruza annas

        sudah bisa gan, 😀
        saya gak buat ID di tabel database nya, karena ada Syarat penulisan nya, jadi saya bikin prjcsIdent, karena dia id di tabel project..
        setelah saya diskusi sama boss saya, terus saya ubah jadi id baru bisa gan.
        😀

        • Guest

          untuk, koneksi antar page bagaimana ya gan ?
          ada tutorialnya juga ?

      • miruza annas

        untuk, koneksi antar page bagaimana ya gan ?
        ada tutorialnya juga ? :)

        • http://digitalmapia.com/ digitalmapia

          Koneksi antar page maksudnya gimana gan? yang di routes.php?

          • miruza annas

            begini gan maksudnya,
            kan setiap page ada menu diatas nya di bagian dashboard, kyk menu home, terus menu project misanya,
            cara supaya klo ane dari home, klick menu project langsung pindah ke page project.
            terus cara bikin menu dan sub menu nya sendiri pada dashboard gimana ya gan ?
            masih baru2 kenal laravel nih ^^

          • http://digitalmapia.com/ digitalmapia

            owh, itu tinggal bikin link-nya gan. trus, bikin route-nya di routes.php gan. soal route, baca disini aja gan: http://digitalmapia.com/bekerja-dengan-routing-pada-laravel/

  • neng restu

    gan, kan saya hampir sama ada eror SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘id’ in ‘where clause’ (SQL: select * from `t_sheds` where `id` = 1 , ngeceknya gimana?? kan saya pakenya nik bukan id