CRUD adalah singkatan yang berasal dari Create, Read, Update, dan Delete, dimana keempat istilah tersebut merupakan fungsi utama yang nantinya diimplementasikan ke dalam basis data.
Empat poin tersebut mengindikasikan bahwa fungsi utama melekat pada penggunaan database relasional beserta aplikasi yang mengelolanya, seperti Oracle, MySQL, SQL Server, dan lain – lain.
Jika dihubungkan dengan tampilan antarmuka (interface), maka peran CRUD sebagai fasilitator berkaitan dengan tampilan pencarian dan perubahan informasi dalam bentuk formulir, tabel, atau laporan. Nantinya, akan ditampilkan dalam browser atau aplikasi pada perangkat komputer user.
Disini kita akan membuat mengimplementsasi CRUD pada table Category dan Post.
composer create-project Laravel/laravel blog
Nah pada langkah kedua ini kita akan mengupdate database di file .env anda.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=database_user_name
DB_PASSWORD=database_password
composer require laravel/breeze --dev
php artisan breeze:install
npm install
npm run dev
php artisan migrate
php artisan make:model Category -m
Akan otomatis terbuat 2 file yaitu :
Sesuaikan kolom pada file database/migrations/*_create_categories_table.php :
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('slug');
$table->timestamps();
});
}
Dari perubahan di atas kita menambahkan 2 field baru dengan type data string.
Jalankan Migrate
php artisan migrate
Supaya field2 dapat ditambahkan atau diubah kita perlu menambahkan properti $fillabel pada file app/Models/Category.php :Supaya field2 dapat ditambahkan atau diubah kita perlu menambahkan properti $fillabel pada file app/Models/Category.php :
Membuat dummy jadi sebelum di insert sudah terdapat beberapa data dummy sebelumnya. Buat file database/seeders/CategorySeeder.php :
'PHP',
'slug' => \Str::slug('PHP'),
'created_at' => now(),
],
[
'name' => 'Python',
'slug' => \Str::slug('Python'),
'created_at' => now(),
],
[
'name' => 'Java',
'slug' => \Str::slug('Java'),
'created_at' => now(),
],
[
'name' => 'C++',
'slug' => \Str::slug('C++'),
'created_at' => now(),
],
[
'name' => 'Ruby',
'slug' => \Str::slug('Ruby'),
'created_at' => now(),
],
];
Category::insert($data);
}
}
php artisan db:seed --class=CategorySeeder
php artisan make:model Post -mcr
Perintah di atas akan membuat 3 file secara bersamaan :
Sesuaikan field pada file database/migrations/*_create_posts_table.php :
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('slug');
$table->longText('description');
$table->foreignId('category_id')->constrained();
$table->timestamps();
});
}
php artisan migrate
Tambahkan property $fillable untuk fields yang akan diizinkan untuk dimanipulasi.
belongsTo(Category::class);
}
}
Supaya Controller dapat dibuka kita perlu menambahkan baris route pada file routes/web.php :
Route::resource('posts', PostController::class);
Sebelumnya file Controller sudah otomatis digenerate pada langkah di atas dengan di dalamnya terdapat fungsi bawaan seperti index, create, store, show, edit, update, & destroy.
Sekarang kita akan mengedit file Controller agar benar2 dapat digunakan. Buka file app/Http/Controllers/PostController.php :
orderBy('id','desc')->paginate(10);
return view('posts.index',compact('title','data'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$title = 'Post';
$categories = Category::all();
return view('posts.create', compact('title','categories'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'title' => 'required|string|max:255',
'content' => 'required',
'category_id' => 'required|exists:App\Models\Category,id'
]);
Post::create([
'title' => $request->title,
'slug' => \Str::slug($request->title),
'content' => $request->content,
'category_id' => $request->category_id,
]);
return redirect()->route('posts.index')->with('status', 'Post Created Successfully');
}
/**
* Display the specified resource.
*
* @param \App\Models\Post $post
* @return \Illuminate\Http\Response
*/
public function show(Post $post)
{
return view('posts.show', compact('post'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Post $post
* @return \Illuminate\Http\Response
*/
public function edit(Post $post)
{
$title = 'Post';
$categories = Category::all();
return view('posts.edit', compact('title','categories', 'post'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Post $post
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Post $post)
{
$request->validate([
'title' => 'required|string|max:255',
'content' => 'required',
'category_id' => 'required|exists:App\Models\Category,id',
]);
$post->title = $request->title;
$post->slug = \Str::slug($request->title);
$post->content = $request->content;
$post->category_id = $request->category_id;
$post->save();
return redirect()->route('posts.index')->with('status', 'Post Updated Successfully');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Post $post
* @return \Illuminate\Http\Response
*/
public function destroy(Post $post)
{
$post->delete();
return redirect()->route('posts.index')->with('status', 'Post Delete Successfully');
}
}
Sebelum membuat view kita akan membuat folder baru resources/views/posts .
Buat file baru posts/index.blade.php :
@extends('layouts.app')
@section('content')
@if($message = Session::get('success'))
{{ $message }}
@endif
{{ $title }}
@can('create posts', Post::class)
Add
@endcan
Title
Content
Category
Action
@if(count($data) > 0)
@foreach($data as $row)
{{ $row->title }}
{{ substr($row->content,1,100) }}
{{ $row->category->name }}
@endforeach
@else
No Data Found
@endif
{!! $data->links() !!}
@endsection('content')
Buat file baru posts/create.blade.php :
@extends('layouts.app')
@section('content')
@if($errors->any())
@foreach($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Add {{$title}}
@endsection('content')
Buat file baru posts/edit.blade.php :
@extends('layouts.app')
@section('content')
npm run dev
php artisan serve
Untuk fase Produksi jalankan perintah berikut :
npm run build