Laravel 10 CRUD Tutorial: A Comprehensive Guide for Beginners

Laravel 10 CRUD Tutorial: A Comprehensive Guide for Beginners


Welcome, developers, to the exciting world of Laravel 10! In this comprehensive guide, we will embark on a journey to master CRUD operations using Laravel 10—a powerful PHP framework known for its elegant syntax and developer-friendly features. Whether you’re a Laravel enthusiast or a newcomer eager to explore the latest version, this tutorial is your gateway to understanding and implementing CRUD in Laravel 10.

Why Laravel 10?

Before we dive into the CRUD operations, let’s take a moment to appreciate why Laravel 10 is the framework of choice for developers. Known for its expressive syntax, robust features, and a vibrant ecosystem, Laravel 10 brings a host of improvements to the table. From enhanced developer tools to advanced security measures, Laravel 10 sets the stage for a seamless and enjoyable coding experience.

Now, let’s jump into the essence of this guide—creating, reading, updating, and deleting data with Laravel 10.

Getting Started with Laravel 10 CRUD

Let’s kick things off by understanding the basics. In this section, we’ll explore how to set up Laravel 10, configure your database, and get your development environment ready for seamless CRUD magic. If you would need assistance with how to install the Laravel 10, please visit my other blog post for detailed instructions: A step-by -step guide to install Laravel 10.

Laravel Model

Within the Laravel framework, a model plays a pivotal role, acting as a direct representation of a database table. Moreover, functioning as a bridge between your application and the underlying database, it facilitates a seamless interaction with your data, embracing an object-oriented approach. Additionally, thanks to Laravel’s eloquent ORM (Object-Relational Mapping), the intricacies of database operations are effortlessly streamlined. This makes transforming the execution of CRUD actions into a straightforward and intuitive process.

First, create a model named “Post” using the following command:

php artisan make:model Post

This will generate a file named `Post.php` in the `app/Models` directory. You can customize the model’s properties and methods to suit the needs of your application. Add the necessary fillable fields and any relationships in this model.

// app/Models/Post.php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class Post extends Model


    protected $fillable = ['title', 'content'];


Laravel Migration

At its core, migration is Laravel’s way of managing database changes. It allows you to version-control your database schema, making it easy to share with other developers and maintain a coherent database structure across different environments. Laravel Migration follows a straightforward workflow. First, you define your database schema using Artisan commands. Then, you run these migrations to update the database. This ensures that your database structure evolves alongside your application.

Next, create a migration for the “posts” table using the following command:

php artisan make:migration create_posts_table

This will create a file in the `database/migrations` directory. Update the file to define the table structure:

// database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php

use IlluminateDatabaseMigrationsMigration;

use IlluminateDatabaseSchemaBlueprint;

use IlluminateSupportFacadesSchema;

class CreatePostsTable extends Migration


    public function up()


        Schema::create('posts', function (Blueprint $table) {







public function down()





Run the migration to create the “posts” table:

php artisan migrate

When you run php artisan migrate, Laravel executes any pending migrations and creates the specified database tables, if they do not already exist.

Laravel Controller:

The controller takes center stage, conducting the harmony between HTTP requests and responses. Above all, a well-crafted controller ensures that your application follows a structured and maintainable path, orchestrating the seamless flow of data. In this section, we’ll unravel the significance of the Laravel controller and explore how it handles the various CRUD operations. The controller handles the HTTP requests and responses. To illustrate this, let’s generate a controller using Artisan, Laravel’s command-line tool. Open your terminal and run the following command:

php artisan make:controller PostController

This will create a file named `PostController.php` in the `app/Http/Controllers` directory. Add the CRUD methods to handle blog posts:

1. Index Method: The Prelude to Listing Posts

The index method serves as the prelude, orchestrating the display of all posts. It retrieves posts from the database and directs the application to the corresponding view.

public function index() { 

$posts = Post::all(); 

return view('posts.index', compact('posts')); 


2. Create and Store Methods: Composing New Posts

The create method sets the stage for creating new posts, navigating to the view where users can input their content. The store method conducts the operation of storing a new post in the database.

public function create() { 

return view('posts.create'); 


public function store(Request $request) { 

Post::create($request->only(['title', 'content'])); 

return redirect()->route('posts.index')->with('success', 'Post created successfully!'); 


3. Edit and Update Methods: Modifying the Melody

The edit method manages the preparation for editing a post, directing users to the edit view. The update method takes charge of modifying the existing post in the database.

public function edit(Post $post) { 

return view('posts.edit', compact('post')); 


public function update(Request $request, Post $post) { 

$post->update($request->only(['title', 'content'])); 

return redirect()->route('posts.index')->with('success', 'Post updated successfully!'); }

4. Destroy Method: The Grand Finale

The destroy method takes center stage in the grand finale, conducting the removal of a post from the database.

public function destroy(Post $post) { 


return redirect()->route('posts.index')->with('success', 'Post deleted successfully!'); }

Laravel Blade Views

At its core, a view in Laravel is a templated file that encapsulates the HTML and presentation logic of a web page. Transitioning from this fundamental understanding, Laravel Views distinguish themselves as a crucial element in maintaining a clean and organized code structure. Furthermore, they facilitate the separation of application logic from presentation, ensuring that developers can concentrate on crafting dynamic and visually appealing interfaces without entangling their backend logic. Herein lies one of Laravel’s standout features is the Blade templating engine. Blade provides a concise yet powerful syntax for writing views, making it easy to embed PHP code within your HTML

Creating a New Post

Let’s kick off with the creation of a new post. Below is a snippet of code for the create.blade.php view:

<!-- resources/views/posts/create.blade.php --> 

<h1>Create New Post</h1> 

<form action="{{ route('') }}" method="post"> 


<label for="title">Title</label> 

<input type="text" name="title" id="title" required> 

<label for="content">Content</label> 

<textarea name="content" id="content" cols="30" rows="10" required </textarea> 

<button type="submit">Create Post</button> 


This view presents a clean and intuitive form for users to input a title and content for their new post. The @csrf directive ensures the security of your form submissions.

Editing an Existing Post

Moving on to the editing process, the edit.blade.php view provides a seamless interface for users to modify an existing post:

<!-- resources/views/posts/edit.blade.php --> 

<h1>Edit Post</h1> 

<form action="{{ route('posts.update', $post->id) }}" method="post"> 



<label for="title">Title</label> 

<input type="text" name="title" id="title" value="{{ $post->title }}" required> 

<label for="content">Content</label> 

<textarea name="content" id="content" cols="30" rows="10" required>{{ $post->content }}</textarea> 

<button type="submit">Update Post</button> 


This view dynamically populates the form fields with the existing post details, making it easy for users to make adjustments. The @method('PUT') directive informs Laravel that this form submission is intended for an update.

Viewing and Managing Posts

The show.blade.php view serves as the display interface for individual posts, allowing users to read the content and providing options for editing or deleting:

<!-- resources/views/posts/show.blade.php --> 

<h1>{{ $post->title }}</h1> 

<p>{{ $post->content }}</p> 

<a href="{{ route('posts.edit', $post->id) }}">Edit</a> 

<form action="{{ route('posts.destroy', $post->id) }}" method="post"> 



<button type="submit">Delete</button> 


This view showcases the title and content of the post and provides links for users to either edit the post or initiate its deletion. The @method('DELETE') directive informs Laravel that this form submission should trigger the delete functionality.

Laravel Routes:

In Laravel, routes serve as the gateway between your application’s URLs and the corresponding logic in your controllers. First and foremost, let’s define the routes for our CRUD operations. Initially, open the routes/web.php file, the command center for our application’s URL handling.

// routes/web.php

use AppHttpControllersPostController;

Route::get('/posts', [PostController::class, 'index'])->name('posts.index');

Route::get('/posts/create', [PostController::class, 'create'])->name('posts.create');

Route::post('/posts', [PostController::class, 'store'])->name('');

Route::get('/posts/{post}/edit', [PostController::class, 'edit'])->name('posts.edit');

Route::put('/posts/{post}', [PostController::class, 'update'])->name('posts.update');

Route::delete('/posts/{post}', [PostController::class, 'destroy'])->name('posts.destroy');

Listing All Posts – posts.index: Transitioning from the creation of routes, let’s begin our journey by visiting the index route. This endpoint will showcase all the existing posts, providing users with an overview of the blog content.

Creating a New Post – posts.create: Transitioning seamlessly to the next stop on our route map, the create route. Here, users will encounter a form, inviting them to contribute to the blog by crafting a new post.

Storing New Posts – Now that we’ve explored the creation route, let’s smoothly transition to the store route. In this context, this endpoint will handle the submission of the form. Consequently, it will store the new post in the database, thereby expanding the realm of our blog content. This marks a crucial phase in our CRUD journey, as it not only captures user input but also signifies a pivotal step towards enriching the dynamic landscape of our application.

Editing Existing Posts – posts.edit: Moving forward in our CRUD journey, let’s shift our focus to the edit route. This endpoint empowers users to modify existing posts, ensuring the content remains up-to-date and relevant.

Updating Existing Posts – posts.update: Transitioning from the edit route, our journey leads us to the update route. This endpoint processes the user’s modifications, seamlessly updating the database to reflect the changes made to the post.

Deleting Existing Posts – posts.destroy: Our final destination in this CRUD pathway is the destroy route. With a seamless transition from update, this endpoint allows users to remove posts, maintaining the cleanliness and relevance of the blog.


Congratulations! You’ve completed our Comprehensive Laravel 10 CRUD Guide, equipping you with the knowledge and confidence to tackle CRUD operations like a pro.In conclusion, embracing the joy of learning and coding with passion, keep honing your skills, and exploring the vast possibilities of Laravel 10. By using Blade views in Laravel 10 CRUD and leveraging the power of models and migrations, you can build dynamic web applications that stand out.In fact, the hands-on experience you gain from working on CRUD operations in Laravel 10 for beginners will serve as a solid foundation for your future Laravel projects.

Moreover, remember that practice makes perfect. So, as you move forward, do not hesitate to explore further, seeking out new challenges and opportunities in the world of web development.Nonetheless, keep referring back to this tutorial, and let it be your guide whenever you embark on a new Laravel 10 CRUD adventure. Happy coding and let your creativity and imagination run wild!

Leave a Reply

Your email address will not be published. Required fields are marked *