DEV Community

Story Coding
Story Coding

Posted on

BUAT CRUD LARAVEL DENGAN CEPAT DAN LENGKAP

Berikut adalah langkah lengkap untuk membuat:

✅ Model (Post)
✅ Controller resource (PostController)
✅ Migration (posts table)
✅ View (index, create, edit, show)
✅ Route (resource)

1) Artisan: Buat model, controller, migration

php artisan make:model Post -mcr
Enter fullscreen mode Exit fullscreen mode

Penjelasan:

Post = nama model
-m = buat migration
-c = buat controller
-r = controller resource (CRUD lengkap)


2) Buat view folder dan file

mkdir -p resources/views/post
New-Item -Path resources/views/student/index.blade.php -ItemType File
New-Item -Path resources/views/student/create.blade.php -ItemType File
New-Item -Path resources/views/student/edit.blade.php -ItemType File
New-Item -Path resources/views/student/show.blade.php -ItemType File

Enter fullscreen mode Exit fullscreen mode

3) Tambahkan route
Di file routes/web.php, tambahkan:

use App\Http\Controllers\PostController;

Route::resource('post', PostController::class);
Enter fullscreen mode Exit fullscreen mode

4) Contoh isi masing-masing file (biar langsung jalan)

  • resources/views/post/index.blade.php
@extends('layouts.app')

@section('content')
    <h1>Daftar Post</h1>
    <a href="{{ route('post.create') }}">Buat Post Baru</a>
    <ul>
        @foreach($posts as $post)
            <li>{{ $post->judul }} - <a href="{{ route('post.edit', $post) }}">Edit</a></li>
        @endforeach
    </ul>
@endsection
Enter fullscreen mode Exit fullscreen mode
  • resources/views/post/create.blade.php
@extends('layouts.app')

@section('content')
    <h1>Buat Post</h1>
    <form action="{{ route('post.store') }}" method="POST">
        @csrf
        <input type="text" name="judul" placeholder="Judul">
        <button type="submit">Simpan</button>
    </form>
@endsection
Enter fullscreen mode Exit fullscreen mode
  • resources/views/post/edit.blade.php
@extends('layouts.app')

@section('content')
    <h1>Edit Post</h1>
    <form action="{{ route('post.update', $post) }}" method="POST">
        @csrf
        @method('PUT')
        <input type="text" name="judul" value="{{ $post->judul }}">
        <button type="submit">Update</button>
    </form>
@endsection
Enter fullscreen mode Exit fullscreen mode
  • resources/views/post/show.blade.php
@extends('layouts.app')

@section('content')
    <h1>{{ $post->judul }}</h1>
    <a href="{{ route('post.index') }}">Kembali</a>
@endsection
Enter fullscreen mode Exit fullscreen mode

5) Contoh Migration (database/migrations/..._create_posts_table.php)

public function up(): void
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('judul');
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Lalu jalankan:

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

6) Contoh PostController Resource
Di app/Http/Controllers/PostController.php:

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    public function index()
    {
        $posts = Post::all();
        return view('post.index', compact('posts'));
    }

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

    public function store(Request $request)
    {
        $validated = $request->validate([
            'judul' => 'required|string|max:255',
        ]);
        Post::create($validated);
        return redirect()->route('post.index');
    }

    public function show(Post $post)
    {
        return view('post.show', compact('post'));
    }

    public function edit(Post $post)
    {
        return view('post.edit', compact('post'));
    }

    public function update(Request $request, Post $post)
    {
        $validated = $request->validate([
            'judul' => 'required|string|max:255',
        ]);
        $post->update($validated);
        return redirect()->route('post.index');
    }

    public function destroy(Post $post)
    {
        $post->delete();
        return redirect()->route('post.index');
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)