Laravel & Vue.js 3 Product Get Tutorial (API Based)

Laravel & Vue.js 3 Product Get Tutorial (API Based)

 After creating products, the next step in Laravel with Vue js CRUD is fetching product values from the database and displaying them in Vue.js 3.
 This tutorial demonstrates how to get product data using a Laravel REST API and consume it in Vue.js 3 using Axios. 

Backend: Laravel Get API

Product Controller

use App\Models\Product;

public function index()
{
    $products = Product::latest()->get();

    return response()->json([
        'status' => true,
        'data' => $products
    ], 200);
}

API Route

Route::get('/products', [ProductController::class, 'index']);

Frontend: Vue.js 3 Product Get

Axios API Service

// src/services/api.js
import axios from 'axios'

export default axios.create({
  baseURL: 'http://localhost:8000/api',
  headers: {
    Accept: 'application/json'
  }
})

Product List Component (Vue 3)

<!-- src/views/ProductList.vue -->

<template>
  <div class="p-6">
    <h2 class="text-xl font-bold mb-4">Product List</h2>

    <table class="w-full border">
      <thead>
        <tr class="bg-gray-100">
          <th>Name</th>
          <th>SKU</th>
          <th>Price</th>
          <th>Stock</th>
        </tr>
      </thead>

      <tbody>
        <tr v-for="product in products" :key="product.id">
          <td>{{ product.name }}</td>
          <td>{{ product.sku }}</td>
          <td>{{ product.price }}</td>
          <td>{{ product.stock }}</td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import api from '@/services/api'

const products = ref([])

const fetchProducts = async () => {
  const response = await api.get('/products')
  products.value = response.data.data
}

onMounted(fetchProducts)
</script>