From Database to Frontend with JS and Blade Templates
burger_shop/ # Laravel project root │ ├── app/ │ ├── Models/ # Eloquent models (Burger, CartItem) │ └── Http/Controllers/ # Controllers for API & web │ ├── database/ │ └── migrations/ # Database schema │ ├── resources/ │ ├── views/ # Blade templates (index.blade.php) │ └── js/ css/ # Frontend assets │ ├── routes/ │ ├── web.php # Routes for Blade views │ └── api.php # Routes for JSON API │ ├── public/ # Publicly accessible folder ├── artisan # Laravel CLI └── composer.json # PHP dependencies
// app/Models/Burger.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Burger extends Model { protected $fillable = ['name', 'price']; }
// app/Http/Controllers/BurgerController.php namespace App\Http\Controllers; use App\Models\Burger; class BurgerController extends Controller { public function index() { return response()->json(Burger::all()); } }
Add the route in routes/api.php:
use App\Http\Controllers\BurgerController;
Route::get('/burgers', [BurgerController::class, 'index']);
async function addToCart(burgerId, qty = 1) { const res = await fetch('/api/cart', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({burger_id: burgerId, quantity: qty}) }); return res.json(); }
<ul id="catalog"> @foreach ($burgers as $b) <li> <strong>{{ $b->name }}</strong> — ${{ $b->price }} <button class="add-to-cart" data-id={{ $b->id }}>Add</button> </li> @endforeach </ul>
// PHPUnit test for Burger model public function testBurgerModel() { $burger = new Burger(['name' => 'Cheese', 'price' => 5.99]); $this->assertEquals('Cheese', $burger->name); } // JS test async function testAddToCart() { const res = await addToCart(1, 2); console.log('Cart response:', res); }
| Layer | Example | Purpose |
|---|---|---|
| Database | burgers table | Stores burger items |
| Eloquent Models | Burger::all() | ORM to query database |
| Controllers | /api/burgers | Returns JSON or processes cart actions |
| Frontend JS | fetch('/api/cart') | Sends/receives JSON and updates UI |
| Blade Templates | {{ '{{ $b->name }}' }} | Renders initial list of burgers |
| Testing | PHPUnit + JS console tests | Ensures backend and frontend logic works |