How to install laravel 9
https://tutorial101.blogspot.com/2022/02/how-to-install-laravel-9.html
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
Create tables
php artisan make:migration create_categories_table
php artisan make:migration create_products_table
C:\xampp\htdocs\laravel9\blog>php artisan make:migration create_categories_table
C:\xampp\htdocs\laravel9\blog>php artisan make:migration create_products_table
Open new products and categories migrations
yourproject/database/migrations
blog\database\migrations\_create_products_table.php
edit code blog\database\migrations\_create_products_table.php
products_table.php
//products_table.php <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('prodname'); $table->integer('category_id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('products'); } };categories_table.php
//categories_table.php <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('categories', function (Blueprint $table) { $table->id(); $table->string('catname'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('categories'); } };Database Migration
php artisan migrate
C:\xampp\htdocs\laravel9\blog>php artisan migrate
Migration table created successfully.
check database table
CREATE TABLE `products` (
`id` bigint(20) UNSIGNED NOT NULL,
`prodname` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`category_id` int(11) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `products` (`id`, `prodname`, `category_id`, `created_at`, `updated_at`) VALUES
(1, 'Milk', 1, '2022-05-13 07:43:06', '2022-05-13 07:43:06'),
(2, 'Coffee', 1, '2022-05-13 07:43:06', '2022-05-13 07:43:06'),
(3, 'Iphone 13', 2, '2022-05-13 07:43:58', '2022-05-13 07:43:58'),
(4, 'Samsung Galaxy', 2, '2022-05-13 07:43:58', '2022-05-13 07:43:58');
CREATE TABLE `categories` (
`id` bigint(20) UNSIGNED NOT NULL,
`catname` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `categories` (`id`, `catname`, `created_at`, `updated_at`) VALUES
(1, 'Drink', '2022-05-13 07:42:02', '2022-05-13 07:42:02'),
(2, 'Mobiles', '2022-05-13 07:42:02', '2022-05-13 07:42:02');
Creating Controller
php artisan make:controller ProductController --resource
C:\xampp\htdocs\laravel9\blog>php artisan make:controller ProductController --resource
change it with the following codes:
blog\app\Http\Controllers\ProductController.php
//blog\app\Http\Controllers\ProductController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Category; use App\Models\Product; class ProductController extends Controller { public function index() { $products = Product::with('category')->get(); $categories = Category::with('products')->get(); return view('index', compact('products', 'categories')); } }Create Model
Model is used to get the data from the database.
php artisan make:model Product
php artisan make:model Category
C:\xampp\htdocs\laravel9\blog>php artisan make:model Product
C:\xampp\htdocs\laravel9\blog>php artisan make:model Category
blog\app\Models\Category.php and blog\app\Models\Product.php
blog\app\Models\Category.php
//blog\app\Models\Category.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use App\Models\Product; class Category extends Model { use HasFactory; protected $fillable = [ 'id', 'catname', ]; public function products() { return $this->hasMany(Product::class, 'category_id', 'id'); } }blog\app\Models\Product.php
//blog\app\Models\Product.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use App\Models\Category; class Product extends Model { use HasFactory; protected $fillable = [ 'id', 'prodname', 'category_id', ]; public function category() { return $this->belongsTo(Category::class); } }Create Views
Bootstrap 5 https://getbootstrap.com/docs/5.1/getting-started/download/
blog\resources\views\layout.blade.php
//blog\resources\views\layout.blade.php <html> <head> <title>Laravel 9 Join Two Tables</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> </head> <body> <div class="container"> @yield('content') </div> </body> </html>blog\resources\views\index.blade.php
//blog\resources\views\index.blade.php @extends('layout') @section('content') <div class="row" style="margin:20px;"> <div class="col-12"> <h2>Laravel Join Two Tables</h2> <table class="table table-bordered table-striped"> <thead> <tr> <th scope="col">#</th> <th scope="col">Product name</th> <th scope="col">Category Name</th> </tr> </thead> <tbody> @foreach ($products as $product) <tr> <td>{{ $loop->iteration }}</td> <td>{{ $product->prodname }}</td> <td>{{ $product->category->catname }}</td> </tr> @endforeach </tbody> </table> </div> </div>Creating Routes
blog\routes\web.php
//blog\routes\web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\ProductController; //add product Controller Route::get('/', function () { return view('welcome'); }); Route::get('products', [ProductController::class, 'index']);Run C:\xampp\htdocs\laravel\blog>php artisan serve
Starting Laravel development server: http://127.0.0.1:8000