Menambahkan Data Eloquent Laravel

Menambahkan data ke basis data bukanlah hal yang paling asing untuk dilakukan dan itu sangat mudah digunakan di Laravel. Hanya melakukan beberapa langkah saja Anda bisa menambahkan data dengan mudah. Pada tutorial ini saya juga membahas bagaimana membuat password hash, ini saya lakukan karena menggunakan tabel users.

Daftar isi:

1. Skrip create.blade.php

Buatlah berkas create.blade.php pada direktori users kemudian salin dan tempelkan skrip dibawah ini ke dalam berkas tersebut.

@extends('layouts.default', [
    'title' => 'Tambah user'
])

@section('content')
<div class="level">
    <div class="level-left">
        <div class="level-item">
            <h1 class="title is-4">Tambah user</h1>
        </div>
    </div>
    <div class="level-right">
        <div class="level-item">
            <a href="{{ route('users.index') }}" class="button is-light">Kembali</a>
        </div>
    </div>
</div>

<hr>

<form action="#" method="post">
    @csrf
    
    <div class="field">
        <label for="name" class="label">Nama Lengkap</label>
        <div class="control">
            <input type="text" name="name" id="name" class="input" value="{{ old('name') }}">
        </div>
    </div>

    <div class="field">
        <label for="email" class="label">Alamat E-Mail</label>
        <div class="control">
            <input type="email" name="email" id="email" class="input" value="{{ old('email') }}">
        </div>
    </div>

    <div class="field">
        <label for="password" class="label">Kata Sandi</label>
        <div class="control">
            <input type="password" name="password" id="password" class="input">
        </div>
    </div>

    <div class="field">
        <label for="password_confirmation" class="label">Konfirgurasi Kata Sandi</label>
        <div class="control">
            <input type="password" name="password_confirmation" id="password_confirmation" class="input">
        </div>
    </div>

    <div class="field">
        <button type="submit" class="button is-success">Simpan</button>
    </div>

</form>
@endsection

Catatan: Bagi Anda yang belum tahu fungsi old() dimana suatu variabel bila ada maka akan menampilkan nilai sebelumnya yang dimasukan. Maksudnya ialah jika terdapat proses simpan yang gagal maka data yang dimasukan tetap ada.

2. Perbarui skrip blade

Disini perbaruilah skrip yang telah ditentukan pada masing-masing berkas:

Perbarui skrip create.blade.php

Hal ini dilakukan saat terjadinya proses submit maka akan masuk ke dalam routing yang sudah ditentukan. Jadi akan masuk ke fungsi store(), silakan perbarui skrip dari berkas tersebut.

<form action="#" method="post">
// menjadi
<form action="{{ route('users.store') }}" method="post">

Perbarui skrip berkas index.blade.php

Sekarang saatnya menambahkan tautan ke halaman create. Silakan masuk ke berkas index.blade.php carilah skrip yang sesuai seperti dibawah ini.

<a href="#" class="button is-light">Tambah</a>
// menjadi
<a href="{{ route('users.create') }}" class="button is-light">Tambah</a>

3. Konfirgurasi fungsi create() dan store()

Silakan berahli ke berkas UserController.php untuk melakukan penambahan skrip yang telah disesuaikan dibawah ini:

Fungsi create()

Fungsi create() akan memanggil berkas create.blade.php dan tautannya ada di berkas index.blade.php dengan tombol Tambah. Silakan sesuaikan skrip dibawah ini:

public function create()
{
    return view('users.create');
}

Fungsi store()

Saat dilakukan submit pada form create maka akan dilanjutkan ke fungsi store() untuk menambahkan data ke basis data. Silakan sesuaikan skrip dibawah ini:

public function store(Request $request)
{
    User::create(
        $request->all()
    );
    return redirect()->route('users.index');
}

Setelah melakukan submit secara otomatis halaman akan diahlikan ke halaman utama users index.

4. Bonus - Kata sandi tidak di hash

Pada kenyataannya proses penambahan data pengguna berhasil tersimpan dengan benar. Tetapi kenyataannya itu tidak benar-benar baik pada kolom password, karena kata sandi belum dilakukan hashing. Hal itu bisa dilakukan dengan mudah, silakan masuk ke berkas User.php pada direktori Models. Silakan sesuaikan skrip dibawah ini dengan benar:

use Illuminate\Support\Facades\Hash;
...

class User extends Authenticatable
{
    ...

    protected $appends = [
        'password'
    ];

    public function setPasswordAttribute($pass)
    {
        $this->attributes['password'] = Hash::make($pass);
    }
}

Jadi, saat terjadinya proses submit maka variabel $appends akan di eksekusi ternyata ada nilai password dan sedangkan terdapat fungsi setPasswordAttribute() maksudnya atur variabel atribut password. Maka kata sandi yang dimasukan akan diproses pada fungsi tersebut sebelum memasukannya ke dalam basis data sebagai data yang tersimpan.