CRUD User Laravel 8 – Tutorial Create, Read, Update, dan Delete User Laravel 8 dan MySQL.
Membuat Project Laravel
Pastikan Anda sudah menginstall composer, kemudian jalankan perintah berikut di command prompt.
composer create-project laravel/laravel laravel-crud-user
Mengatur Database MySQL
Buat database dengan nama laravel
di http://localhost/phpmyadmin
jika Anda menginstall XAMPP untuk server MySQL.
Sesuaikan pengaturan koneksi mysql di project laravel pada file .env
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
Sesuaikan DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
, dan DB_PASSWORD
sesuai server MySQL.
Membuat Migration User
Laravel 8 sudah menyediakan migration untuk user yang ada di direktori database/migrations
. Jika belum ada atau ingin membuat ulang, Anda bisa menghapus file tersebut dan membuat migration baru dengan perintah berikut.
php artisan make:migration create_user_table --create=tb_user
Kemudian sesuaikan field pada migration sebagai berikut
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; class CreateUserTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('tb_user', function (Blueprint $table) { $table->id('id_user'); $table->string('nama_user'); $table->string('email')->unique(); $table->string('password'); $table->string('level'); $table->timestamps(); }); DB::table('tb_user')->insert([ 'nama_user' => 'Administrator', 'email' => 'admin@gmail.com', 'password' => 'admin', 'level' => 'admin', ]); DB::table('tb_user')->insert([ 'nama_user' => 'User', 'email' => 'user@gmail.com', 'password' => 'user', 'level' => 'user', ]); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tb_user'); } }
Perintah insert
berfungsi untuk menambahkan data user langsung ketika selesai membuat tabel.
Lakukan migration dengan mengetikan perintah berikut.
php artisan migrate
Setelah berhasil menjalankan perintah migrate, maka di database akan ada tabel tb_user
berikan 2 data.
Membuat Model User (Eloquent)
Pada laravel 8 sudah berisi model User yang ada di direktori app/models
. Jika belum ada atau ingin buat ulang, hapus model User dan gunakan perintah berikut.
php artisan make:model User
Sesuaikan app/models/User.php
sebagai berikut.
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as AuthUser; class User extends AuthUser { use HasFactory; protected $table = 'tb_user'; protected $primaryKey = 'id_user'; protected $fillable = [ 'nama_user', 'email', 'password', 'level', ]; }
Properti $table
untuk mengatur nama tabel di database, jika nama tabel anda users
, tidak usah mengubah properti ini.
Properti $primaryKey
untuk mengatur PRIMARY KEY di tabel user, jika primary key anda id
, tidak usah mengubah properti ini.
Properti $fillable
untuk mengatur field apa saja yang bisa diinput/ubah ketika melakukan crud di tabel user.
Membuat Controller User Tipe Resource
Gunakan perintah berikut untuk membuat controller resource sekaligus mengatur model menjadi User.
php artisan make:controller UserController --resource --model=User
Sesuaikan app/controllers/UserController.php
sebagai berikut.
<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; class UserController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(Request $request) { $data['title'] = 'Data User'; $data['q'] = $request->q; $data['rows'] = User::where('nama_user', 'like', '%' . $request->q . '%')->get(); return view('user.index', $data); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create(Request $request) { $data['title'] = 'Tambah User'; $data['levels'] = ['admin' => 'Admin', 'user' => 'User']; return view('user.create', $data); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $request->validate([ 'nama_user' => 'required', 'email' => 'required|unique:tb_user', 'password' => 'required', 'level' => 'required', ]); $user = new User(); $user->nama_user = $request->nama_user; $user->email = $request->email; $user->password = Hash::make($request->password); $user->level = $request->level; $user->save(); return redirect('user')->with('success', 'Tambah Data Berhasil'); } /** * Display the specified resource. * * @param \App\Models\User $user * @return \Illuminate\Http\Response */ public function show(User $user) { } /** * Show the form for editing the specified resource. * * @param \App\Models\User $user * @return \Illuminate\Http\Response */ public function edit(User $user) { $data['title'] = 'Ubah User'; $data['row'] = $user; $data['levels'] = ['admin' => 'Admin', 'user' => 'User']; return view('user.edit', $data); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\User $user * @return \Illuminate\Http\Response */ public function update(Request $request, User $user) { $request->validate([ 'nama_user' => 'required', 'email' => 'required', 'level' => 'required', ]); $user->nama_user = $request->nama_user; $user->email = $request->email; if ($request->password) $user->password = Hash::make($request->password); $user->level = $request->level; $user->save(); return redirect('user')->with('success', 'Ubah Data Berhasil'); } /** * Remove the specified resource from storage. * * @param \App\Models\User $user * @return \Illuminate\Http\Response */ public function destroy(User $user) { $user->delete(); return redirect('user')->with('success', 'Hapus Data Berhasil'); } }
Menambahkan Route User
Tambahkan route untuk crud user di routes/web.php
bertipe resource
seperti berikut.
<?php use App\Http\Controllers\UserController; use Illuminate\Support\Facades\Route; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::resource('user', UserController::class);
Membuat View
View Template
Buat view untuk template di direktori resources/views/app.blade.php
.
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css"> <title>@yield('title', $title)</title> </head> <body> <div class="container"> <h1>@yield('title', $title)</h1> @yield('content') </div> </body> </html>
View Tampil
Buat view untuk menampilkan data user di direktori resources/views/user/index.blade.php
.
@extends('app') @section('content') @if(session('success')) <p class="alert alert-success">{{ session('success') }}</p> @endif <div class="card card-default"> <div class="card-header"> <form class="form-inline"> <div class="form-group mr-1"> <input class="form-control" type="text" name="q" value="{{ $q}}" placeholder="Pencarian..." /> </div> <div class="form-group mr-1"> <button class="btn btn-success">Refresh</button> </div> <div class="form-group mr-1"> <a class="btn btn-primary" href="{{ route('user.create') }}">Tambah</a> </div> </form> </div> <div class="card-body p-0 table-responsive"> <table class="table table-bordered table-striped table-hover mb-0"> <thead> <tr> <th>No</th> <th>Nama</th> <th>Email</th> <th>Level</th> <th>Aksi</th> </tr> </thead> <?php $no = 1 ?> @foreach($rows as $row) <tr> <td>{{ $no++ }}</td> <td>{{ $row->nama_user }}</td> <td>{{ $row->email }}</td> <td>{{ $row->level }}</td> <td> <a class="btn btn-sm btn-warning" href="{{ route('user.edit', $row) }}">Ubah</a> <form method="POST" action="{{ route('user.destroy', $row) }}" style="display: inline-block;"> @csrf @method('DELETE') <button class="btn btn-sm btn-danger" onclick="return confirm('Hapus Data?')">Hapus</button> </form> </td> </tr> @endforeach </table> </div> </div> @endsection
View Tambah
Buat view untuk menambah data user di direktori resources/views/user/create.blade.php
.
@extends('app') @section('content') <div class="row"> <div class="col-md-6"> @if($errors->any()) @foreach($errors->all() as $err) <p class="alert alert-danger">{{ $err }}</p> @endforeach @endif <form action="{{ route('user.store') }}" method="POST"> @csrf <div class="form-group"> <label>Nama User <span class="text-danger">*</span></label> <input class="form-control" type="text" name="nama_user" value="{{ old('nama_user') }}" /> </div> <div class="form-group"> <label>Email <span class="text-danger">*</span></label> <input class="form-control" type="email" name="email" value="{{ old('email') }}" /> </div> <div class="form-group"> <label>Password <span class="text-danger">*</span></label> <input class="form-control" type="password" name="password" /> </div> <div class="form-group"> <label>Level <span class="text-danger">*</span></label> <select class="form-control" name="level" /> @foreach($levels as $key => $val) @if($key==old('level')) <option value="{{ $key }}" selected>{{ $val }}</option> @else <option value="{{ $key }}">{{ $val }}</option> @endif @endforeach </select> </div> <div class="form-group"> <button class="btn btn-primary">Simpan</button> <a class="btn btn-danger" href="{{ route('user.index') }}">Kembali</a> </div> </form> </div> </div> @endsection
View Ubah
Buat view untuk menambah data user di direktori resources/views/user/edit.blade.php
.
@extends('app') @section('content') <div class="row"> <div class="col-md-6"> @if($errors->any()) @foreach($errors->all() as $err) <p class="alert alert-danger">{{ $err }}</p> @endforeach @endif <form action="{{ route('user.update', $row) }}" method="POST"> @csrf @method('PUT') <div class="form-group"> <label>Nama User <span class="text-danger">*</span></label> <input class="form-control" type="text" name="nama_user" value="{{ old('nama_user', $row->nama_user) }}" /> </div> <div class="form-group"> <label>Email <span class="text-danger">*</span></label> <input class="form-control" type="email" name="email" value="{{ old('email', $row->email) }}" /> </div> <div class="form-group"> <label>Password <span class="text-danger">*</span></label> <input class="form-control" type="password" name="password" /> <p class="form-text">Kosongkan jika tidak ingin mengubah password.</p> </div> <div class="form-group"> <label>Level <span class="text-danger">*</span></label> <select class="form-control" name="level" /> @foreach($levels as $key => $val) @if($key==old('level', $row->level)) <option value="{{ $key }}" selected>{{ $val }}</option> @else <option value="{{ $key }}">{{ $val }}</option> @endif @endforeach </select> </div> <div class="form-group"> <button class="btn btn-primary">Simpan</button> <a class="btn btn-danger" href="{{ route('user.index') }}">Kembali</a> </div> </form> </div> </div> @endsection
Menjalankan Project
Silahkan gunakan perintah berikut untuk mengaktifkan server laravel.
php artisan serve
Ketikkan alamat sesuai server diikuti dengan /user di browser (http://127.0.0.1:8000/user
). Hasilnya seperti berikut.
Itulah tutorial membuat CRUD user laravel 8. Jika ada yang ditanyakan, silahkan berkomentar.
Deden
says:Makasih kak
admin
says:Sama sama, semoga membantu.
Ardhi
says:kalau muncur error undefined variable request gimana?
admin
says:Itu berarti penulisan nama variabel salah ketik. Coba dicek kembali baris yang mana error.
Noah
says:gan dapat error “$q” is undefined pada index gimana solusinya
admin
says:Pastikan sudah benar $data[‘q’] = $request->q; di controller function index.
chasper
says:setelah input data tidak masuk dalam database
admin
says:Apakah ada pesan error? Kalau ada bisa kirim fotonya.
y
says:coba kasih 1 project full sampai login yang membedakan halaman admin dan user
fitur nya yg beda apa aja,
misal di menu admin ada laporan dan input data tapi di menu user cuma ada input data
admin
says:Baik, nanti akan di share untuk hak akses setiap level login.
Yy
says:Udh ada kah ini min? Saya buat crud ngikutin web ini, kemudian saya mau buat login websitenya pake tabel ini, gmna ya?
admin
says:CRUD ini bisa nanti digabung dengan https://tugasakhir.id/register-login-password-logout-laravel/
ygy
says:app was not found gimana ming
Hacker
says:method $levels jika tidak ada di controller tidak akan bisa di akses
Iqfir Azirhcaf
says:Bisa bikin halaman login yang terhubung ke sini gak kak?
admin
says:Bisa, nanti saya buatkan tutorialnya. Cek juga artikel regiser, login, password, logout.
Yy
says:Udah ada kah min? Login yang terhubung tabel ini?
Iqfir Azirhcaf
says:Segera ya kak, saya butuh banget menghubungkan CRUD ini dengan halaman login. Jadi biar pas mau akses CRUD ini, harus login dulu. Terima kasih kak
Roby
says:Undefined property: App\Models\User::$image
function image($real_size = false)
{
$thumbnail = $real_size ? ” : ‘small_’;
if ($this->image && file_exists(public_path(‘images/akun/’ . $thumbnail . $this->image)))
return asset(‘images/akun/’ . $thumbnail . $this->image);
else
return asset(‘images/no_image.png’);
}
Roby
says:knapapa saat saya melakukan pengapusan data terdapat error
Undefined property: App\Models\User::$image
admin
says:Gunakan $user->image() bukan $user->image.
admin
says:Gunakan $user->image() bukan $user->image.
Roby
says:knapapa saat saya melakukan pengapusan data terdapat error
Undefined property: App\Models\User::$image
admin
says:Gunakan $user->image() bukan $user->image.
Aulina
says:Kak kalau muncul kayak gini kenapa ya
admin
says:Pastikan sudah buat view di resources/views/app.blade.php.