MVC stands for → Model – View – Controller
It is a software design pattern used to organize application logic into three interconnected layers.
Each layer has a specific responsibility:
| Layer | Purpose |
| Model | Manages data & database operations |
| View | Displays UI to the user |
| Controller | Handles user requests & business logic |
This structure keeps the code clean, reusable, and scalable.
How MVC Works in Laravel
Here’s the flow:
User → Controller → Model → Controller → View → User
- User sends a request (ex: /products)
- Controller receives the request
- Controller talks to Model (fetch data)
- Model gets data from DB
- Controller returns data to View
- View displays UI to user
1. Model (Data Layer)
Handles everything related to database + business data.
In Laravel, Models use Eloquent ORM.
📁 Folder → app/Models
Example:
class Product extends Model
{
protected $fillable = [‘name’, ‘price’];
}
✓ Fetching data:
$products = Product::all();
Model hides database complexity and provides simple methods.
2. View (UI Layer)
Responsible for displaying data to the user.
In Laravel, Views are written using Blade templates.
📁 Folder → resources/views
Example: products.blade.php
@foreach ($products as $product)
<p>{{ $product->name }} – ${{ $product->price }}</p>
@endforeach
View never connects to the database directly — only shows data given by the Controller.
3. Controller (Logic Layer)
Controller receives the request, processes it, interacts with the Model, and returns a response.
📁 Folder → app/Http/Controllers
Example:
use App\Models\Product;
class ProductController extends Controller
{
public function index()
{
$products = Product::all();
return view(‘products’, compact(‘products’));
}
}
The controller is the bridge between Model & View.
MVC Flow Example (Simple Product Listing)
Step 1) Route
routes/web.php
Route::get(‘/products’, [ProductController::class, ‘index’]);
Step 2) Controller
ProductController.php
public function index()
{
$products = Product::all();
return view(‘products’, compact(‘products’));
}
Step 3) Model
Product.php
class Product extends Model
{
protected $fillable = [‘name’,’price’];
}
Step 4) View
products.blade.php
@foreach ($products as $product)
<p>{{ $product->name }}</p>
@endforeach
✔ Output → Product list shown to user
This is MVC in action.
Why MVC is Important in Laravel?
✔ Organizes code
✔ Separation of concerns
✔ Easy debugging & testing
✔ Reusable code structure
✔ Clean & scalable projects
Without MVC → everything becomes messy!