Belajar Laravel Pemula: Cara Menyimpan Data ke Database MySQL

wahyunanangwidodo

wahyunanangwidodo Sabtu, 06 Maret 2021

Belajar Laravel Pemula: Cara Menyimpan Data ke Database MySQL

Kita akan pelajari bersama bagaimana cara menyimpan data ke database MySQL di laravel. Kita akan membuat form input untuk menyimpan data melalui browser, dan melihat juga bagaimana menggunakan postman untuk testing insert data record.

Tutorial ini teruntuk yang sedang mempelajari laravel.

Terdapat beberapa software / aplikasi yang kita butuhkan untuk dapat di install; berikut diantaranya:

Instalasi Laravel

Mari kita awali dengan menginstal laravel. Silahkan gunakan metode penginstalan baik composer atau laravel installer.

Instalasi melalui composer

composer create-project laravel/laravel laravel-app

Instalasi menggunakan Laravel Installer

laravel new laravel-app

Setelah instalasi selesai, silahkan buka di code editor yang di gunakan.

Belajar Laravel Pemula: Cara Menyimpan Data ke Database MySQL

Kita menggunakan laravel 8 untuk tutorial ini.

Membuat Database MySQL

Aktifkan MySQL server pada XAMPP Control Panel dan silahkan membuat database baru melalui phpmyadmin atau aplikasi desktop yang digunakan.

Cara cepat kita bisa gunakan command line:

create database laravel_app;

Lihat Cara Menjalankan MySQL di Command Line jika ingin menggunakannya.

Menghubungkan Database

Setelah database dibuat, selanjutnya kita mengatur environment mengbungkan aplikasi dengan database.

Buka file .env pada project dan atur seperti dibawah ini:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_app
DB_USERNAME=root
DB_PASSWORD=

Membuat File Migrasi Baru

Selanjutnya kita buat file migrasi baru untuk membuat tabel pada database. Sebagai contoh kita akan membuat tabel Posts.

php artisan make:migration create_posts_table

Perintah diatas hanya akan membuat file migrasinya saja. Karena kita akan berinteraksi dengan database ke tabel tersebut, kita juga membutuhkan sebuah Model dari tabel tersebut. Jadi kita membutuhkan model.

Untuk Membuatnya guanakan perintah berikut:

php artisan make:model Post

Cara cepat:

Kita juga bisa membuat file migrasi beserta model nya dengan sekali perintah; sebagai berikut:

php artisan make:model Posts --migration

Perintah --migration juga bisa disingkat -m.

Menambahkan Field Pada File Migrasi

Selanjutnya setelah file migrasi untuk tabel posts dibuat, kita tambahkan beberapa field yang dibutuhkan.

Sebagai contoh kita tambahkan 2 field baru, yaitu title dan body.

Buka file migrasi pada direktori database > migrations > ..._create-posts-table.php lalu buat seperti dibawah ini.

public function up()
{
  Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('body');
    $table->timestamps();
  });
}

Kemudian jalankan perintah php artisan migrate untuk mengirim ke database.

@2W7N9W3 ➜  laravel-app  php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (675.11ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (556.95ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (741.98ms)
Migrating: 2021_02_27_064548_create_posts_table
Migrated:  2021_02_27_064548_create_posts_table (393.95ms)

Databse dan tabel posts telah kita buat.

MariaDB [laravel_app]> show tables;
+-----------------------+
| Tables_in_laravel_app |
+-----------------------+
| failed_jobs           |
| migrations            |
| password_resets       |
| posts                 |
| users                 |
+-----------------------+
5 rows in set (0.001 sec)

MariaDB [laravel_app]> desc posts;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| title      | varchar(255)        | NO   |     | NULL    |                |
| body       | text                | NO   |     | NULL    |                |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
5 rows in set (0.043 sec)

Membuat Controller

Mari kita lanjutkan dengan membuat sebuah Controller yang kita gunakan untuk menulis fungsi, permintaan, ataupun logika aplikasi kita.

Kita buat sebuah Controller baru dengan nama PostController dengan perintah berikut:

php artisan make:controller PostController

Setelah terbuat, akan terletak pada direktori app > Http > Controllers > PostController.php.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    //
}

Terdapat juga opsi yang dapat kita gunakan apabila ingin menggunakan perouteran otomatis yang disediakan dengan beberapa method didalamnya, seperti metode untuk membuat CRUD (create, read, update, dan delete).

Perintahnya adalah sebagai berikut:

php artisan make:controller PostController --resource

Hanya menambahkan --resource atau -r di akhir perintah.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostsController extends Controller
{ 
    public function index()
    {
        //
    }

    public function create()
    {
        //
    }

    public function store(Request $request)
    {
        //
    }
 
    public function show($id)
    {
        //
    }
     
    public function edit($id)
    {
        //
    }
 
    public function update(Request $request, $id)
    {
        //
    }
 
    public function destroy($id)
    {
        //
    }
}

Pada tutorial ini kita gunakan perintah yang pertama tanpa opsi --resource.

Laravel Eloquent

Sekarang kita akan mulai bekerja dengan Eloquent di laravel mengenai bagaimana berinteraksi dengan database khususnya melakukan insert data ke database pada tabel posts.

Ada dua cara yang bisa kita gunakan untuk menyimpan data record baru ke dalam database, yaitu dengan metode new Model; atau dengan metode Mass Assignment menggunakan method create.

Untuk lebih jelasnya mari kita mencobanya.

Kita gunakan cara pertama terlebih dahulu. Kita buka PostController.php dan buat seperti dibawah ini.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Post;

class PostController extends Controller
{
    public function store(Request $request)
    {  
        $post = new Post;

        $post->title = $request->title;
        $post->body = $request->body;

        $post->save(); 
    }
}

Yang kita lakukan diatas adalah pertama kita panggil Model Post use App\Models\Post; untuk tabel Posts, kemudian kita buat method baru store() yang dipanggil saat membuat request. Lalu kita buat instance new [nama model] new Post dan menetapkan atribut sesuai nama field yang ingin kita gunakan, kemudian tutup dengan method save() untuk mengirim data record ke database. Sedangkan untuk keterangan tanggal dan watku created_at updated_at akan otomatis ter-generate tanpa kita definisikan.

Kita bisa mengatur hanya satu atribut field saja apabila di database diatur NULL / nullable = YES.

Membuat Route

Selanjutnya yang akan kita buat adalah route url permintaan yang kita tujuan ke fungsi insert record pada kontroler kita.

Silahkan buka file route web.php pada direkfori routes dan tambahkan route di bawah ini.

use App\Http\Controllers\PostController;
 
Route::post('/post/create', [PostController::class, 'store']);

Disini kita mengatur route untuk permintaan post route pada web.php hanya sebagai contoh. Kenapa demikian, karena jika kita lihat pada folder routes terdapat dua file route yang memiliki kegunaan yang berbeda dan keamanan yang menggunakan middleware berbeda.

Tergantung seperti apa aplikasi yang ingin kita bangun mengenai permintaan url baik untuk public atau antarmuka web dan tidak, contohnya halaman admin atau restful api.

Insert Record Baru Menggunakan Postman

Setelah route dibuat, selanjutnya kita akan membuat request mencoba melakukan insert data record melalui postman untuk testing.

Namun sebelum kita membuat testing melakukan request, ada beberapa hal yang akan kita lakukan terlebih dahulu, seperti generate CSRF token dan membuat output atau response yang akan kita lihat dalam bentuk json.

Pertama mari kita buka kembali PostController.php dan tambahkan response json dibawah ini.

{  
  ...
  
  $post->save();
  
  return response()->json($post, 200);
}

Kemudian kita buat permintaan token CSRF (cross-site request forgery) untuk header; dimana token CSRF merupakan fitur keamanan dari route web.php selain token sesi.

Kita akan melewati hal ini jika route tersebut kita buat pada file route api.php, dan yang akan menggunakan prefix URI /api seperti http://localhost:8000/api/post/create.

Mari kita buka route web.php dan tambahkan route dibawah ini.

Route::get('/token', function () {
    return csrf_token(); 
});

Sekarang buka postman dan kita buat request untuk menghasilkan token terlebih dahulu; seperti gambar dibawah.

Kita gunakan method GET dan masukan url http://localhost:8000/token kemudian kirim.

Belajar Laravel Pemula: Cara Menyimpan Data ke Database MySQL

Setelah kita memiliki csrf token yang muncul di response body, silahkan copy token tersebut dan buat request di tab baru seperti gambar dibawah.

Pertama kita gunakan method POST dengan url http://localhost:8000/post/create dan kita tambahakn header di menu Headers dengan key X-CSRF-TOKEN lalu silahkan paste token di bagian value.

Belajar Laravel Pemula: Cara Menyimpan Data ke Database MySQL

Kemudian menuju ke menu Body dan buat seperti gambar dibawah ini lalu kirim. Gunakan method: POST dan url: http://localhost:8000/post/create.

Belajar Laravel Pemula: Cara Menyimpan Data ke Database MySQL

Setelah dikirim dan berhasil, kita memiliki data record baru pada tabel posts.

MariaDB [laravel_app]> select * from posts;
+----+---------+--------+---------------------+---------------------+
| id | title   | body   | created_at          | updated_at          |
+----+---------+--------+---------------------+---------------------+
|  1 | Title 1 | body 1 | 2021-03-01 11:00:19 | 2021-03-01 11:00:19 |
+----+---------+--------+---------------------+---------------------+
1 row in set (0.001 sec)

Membuat Html Form Input

Sekarang kita beralih ke pembuatan html form setelah selesai mencoba insert data record baru melalui postman.

Kita akan membuat halaman dengan metode inheritance atau template warisan, dimana sebuah template akan digunakan sebagai parent atau induk.

Mari kita buat untuk lebih jelasnya.

Kita buat folder baru pada direktori views dengan nama layouts dan tambahkan file baru dengan nama app.blade.php, kemudian copas html dibawah ini.

//views/layouts/app.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>@yield('title')</title>
</head>
<body>
  <div class="container">
      @yield('content')
  </div>
</body>
</html>

Setelah itu kembali buat folder baru pada direktori views dengan nama post dan sebuah file dengan nama create.blade.php lalu copas html berikut.

//views/post/create.blade.php
@extends('layouts.app')

@section('title', 'Buat Post Baru')

@section('content')
  <form method="POST" action="{{ url('post/create') }}">
    @csrf
    <input name="title" type="text" placeholder="Title..."> 
    <input name="body" type="text" placeholder="Body...">
    <button>Submit</button>
  </form>
@endsection

Html form diatas dibuat cukup sederhana hanya sebagai contoh, silahkan tambahkan css / style jika ingin menambahkan. Jika ingin menggunakan bootstrap lihat cara install bootstrap di laravel 8 untuk penginstalan dan penggunaan.

Mari kita lihat pada form tersebut.

Kita menggunakan method POST untuk permintaan http dengan action ke route dengan URI post/create. Kemudian karena memerlukan validasi csrf token untuk permintaan tersebut, kita tambahkan @csrf yang ter-generate menjadi hidden input value. Lalu pada element input pastikan untuk menambahakn atribut name dengan properti atau field yang ada.

Setelah template halaman dibuat, kita tambahkan route di web.php dan method baru pada PostController.php.

//web.php
Route::get('/post/create', [PostController::class, 'create']);
//PostController.php
public function create() 
{
  return view('post.create');
}

Selanjutnya jalankan php artisan serve pada terminal dan kita coba pada browser.

Silahkan buka http://localhost:8000/post/create dan lakukan inspect halaman pada form; klik kanan > inspect untuk melihat hidden input value.

Belajar Laravel Pemula: Cara Menyimpan Data ke Database MySQL

Sampai disini silahkan menboba untuk menyimpan data record baru melalui form yang telah dibuat.

MariaDB [laravel_app]> select * from posts;
+----+---------+--------+---------------------+---------------------+
| id | title   | body   | created_at          | updated_at          |
+----+---------+--------+---------------------+---------------------+
|  1 | Title 1 | body 1 | 2021-03-02 08:41:00 | 2021-03-02 08:41:00 |
|  2 | Title 2 | body 2 | 2021-03-02 08:41:13 | 2021-03-02 08:41:13 |
+----+---------+--------+---------------------+---------------------+
2 rows in set (0.000 sec)

Karena response setelah data dikirim berupa json, kita akan melihatnya seperti gambar berikut.

Belajar Laravel Pemula: Cara Menyimpan Data ke Database MySQL

Kita bisa ubah response untuk kembali ke halaman yang ada atau beralih ke halaman lain.

$post->save(); 
return back();
$post->save();
return redirect('/'); 

Menggunakan Mass Assigment

Seperti dibahas diawal, bahwa kita juga dapat menggunakan metode Mass Assignment untuk menyimpan data. Metode ini memiliki keamanan yang berfungsi untuk melindungi properti kita dari tindakan yang tidak dinginkan dari luar seperti merubah atau mengambil data di database.

Mari mencobanya.

Pertama kita perlu menambahkan atribut atau field apa saja dari model yang ingin di gunakan secara massal menggunakan properti $fillable di file model kita.

Silahkan buka model Post.php dan buat seperti dibawah ini.

class Post extends Model
{
    use HasFactory;
    
    protected $fillable = [
        'title',
        'body'
    ];
}

Kemudian pada method store() di PostController.php silahkan ubah metode yang ada dengan metode create seperti dibawah ini.

public function store(Request $request)
{   
  $input = $request->all();

  $post = Post::create($input);

  return response()->json($post, 200);
}

Silahkan simpan dan mencoba kembali membuat data baru.

MariaDB [laravel_app]> select * from posts;
+----+---------+--------+---------------------+---------------------+
| id | title   | body   | created_at          | updated_at          |
+----+---------+--------+---------------------+---------------------+
|  1 | Title 1 | body 1 | 2021-03-02 09:35:25 | 2021-03-02 09:35:25 |
|  2 | Title 2 | body 2 | 2021-03-02 09:35:48 | 2021-03-02 09:35:48 |
|  3 | Title 3 | body 3 | 2021-03-02 09:36:00 | 2021-03-02 09:36:00 |
+----+---------+--------+---------------------+---------------------+
3 rows in set (0.000 sec)

Selesai

Sampai disini kita telah selesai mempelajari bagaimana cara menyimpan data ke databse MySQL di laravel baik menggunakan postman untuk membuat request dan atau membuat html form input. Silahkan dipelajari dan dikembangkan.

Sumber: Dokumentasi Laravel

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel

Berlangganan

Berlangganan untuk mendapat pemberitahuan artikel terbaru via email.