Eloquent Has One of Many Tutorial in Laravel 11
<?php
namespace App\Http\Controllers;
use App\Models\Customer;
use Illuminate\Http\Request;
class CustomerController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
// showing All customers details from "customers" table
// $customers = Customer::get();
// return $customers;
// showing All customers details with their latest Orders
// $customers = Customer::with("latestOrder")->get();
// return $customers;
// showing Any particular customers details
// $customers = Customer::with("latestOrder")->find(2);
// return $customers;
// showing the oldest order of customer number 2 as shown below :
// $customers = Customer::with("oldestOrder")->find(2);
// return $customers;
// showing the oldest order of customer number 1 as shown below :
// $customers = Customer::with("oldestOrder")->find(1);
// return $customers;
// showing largest amount of customer number 1 as shown below :
// $customers = Customer::with("largestOrder")->find(1);
// return $customers;
// showing smallest amount of customer number 1 as shown below :
// $customers = Customer::with("smallestOrder")->find(1);
// return $customers;
// showing All largest amount of all customers as shown below :
// $customers = Customer::with("largestOrder")->get();
// return $customers;
// showing All smallest amount of all customers as shown below :
// $customers = Customer::with("smallestOrder")->get();
// return $customers;
// showing all customers with their all orders from "orders" table
// $customers = Customer::with("orders")->get();
// return $customers;
// showing all customers with their largest orders from "orders" table
// $customers = Customer::with("orders")->with("largestOrder")->get();
// return $customers;
// showing all customers with their smallest orders from "orders" table
// $customers = Customer::with("orders")->with("smallestOrder")->get();
// return $customers;
// showing all customers with their latest orders from "orders" table
// $customers = Customer::with("orders")->with("latestOrder")->get();
// return $customers;
// showing all customers with their oldest orders from "orders" table
$customers = Customer::with("orders")->with("oldestOrder")->get();
return $customers;
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}
Above File is app\Http\Controllers\CustomerController FileBelow File is app\Http\Controllers\OrderController File
<?php
namespace App\Http\Controllers;
use App\Models\Order;
use Illuminate\Http\Request;
class OrderController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$order = Order::create([
"amount" => 2300.00,
"customer_id" => 2
]);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}
Below File is app\Models\Customer File
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Customer extends Model
{
public $timestamps = false;
protected $table = "customers";
protected $fillable = ["name", "email", "phone"];
public function orders()
{
return $this->hasMany(Order::class);
}
public function latestOrder()
{
// Here from "Many" table, only one record will fetch because we have used "hasOne()" method
return $this->hasOne(Order::class)->latestOfMany();
}
public function oldestOrder()
{
return $this->hasOne(Order::class)->oldestOfMany();
}
// Below "max" and "min" are aggregate methods
public function largestOrder()
{
return $this->hasOne(Order::class)->ofMany("amount", "max");
}
public function smallestOrder()
{
return $this->hasOne(Order::class)->ofMany("amount", "min");
}
}
Below File is app\Models\Order File
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Order extends Model
{
public $timestamps = true;
protected $table = "orders";
protected $fillable = ["amount", "customer_id"];
}
Below File is database\json\customers File
[
{
"name": "Yahoo Baba",
"email": "yahoobaba@gmail.com",
"phone": "99887744"
},
{
"name": "Salman Khan",
"email": "salman@gmail.com",
"phone": "88447755"
},
{
"name": "Deepika Padukone",
"email": "deepika@gmail.com",
"phone": "77663322"
},
{
"name": "Abhishek Bachchan",
"email": "abhishek@gmail.com",
"phone": "55667788"
}
]
Below File is database\json\orders File
[
{
"amount": 2500.00,
"customer_id": 2
},
{
"amount": 3600.00,
"customer_id": 1
},
{
"amount": 5400.00,
"customer_id": 3
},
{
"amount": 5684.00,
"customer_id": 2
},
{
"amount": 2453.00,
"customer_id": 4
},
{
"amount": 1456.00,
"customer_id": 3
},
{
"amount": 2877.00,
"customer_id": 1
},
{
"amount": 1233.00,
"customer_id": 2
},
{
"amount": 1478.00,
"customer_id": 3
},
{
"amount": 9874.00,
"customer_id": 1
}
]
Below File is database\migrations\2024_12_11_124611_create_customers_table File
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('customers', function (Blueprint $table) {
$table->id();
$table->string("name");
$table->string("email", 50)->unique();
$table->string("phone", 50)->unique();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('customers');
}
};
Below File is database\migrations\2024_12_12_043320_create_orders_table File
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('orders', function (Blueprint $table) {
$table->id();
$table->decimal("amount", 9, 2);
$table->unsignedBigInteger("customer_id");
$table->foreign("customer_id")->references("id")->on("customers")->onUpdate("cascade")->onDelete("cascade");
$table->timestamps();
// Second way for making Foreign key as shown below :
// $table->foreignId("customer_id")->constrained("customers")->onUpdate("cascade")->onDelete("cascade");
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('orders');
}
};
Below File is database\seeders\CustomerSeeder File
<?php
namespace Database\Seeders;
use App\Models\Customer;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File;
class CustomerSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$json = File::get(path: "database/json/customers.json");
$customers = collect(json_decode($json));
$customers->each(function ($customer) {
Customer::create([
"name" => $customer->name,
"email" => $customer->email,
"phone" => $customer->phone
]);
});
}
}
Below File is database\seeders\OrderSeeder File
<?php
namespace Database\Seeders;
use App\Models\Order;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File;
class OrderSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$json = File::get(path: "database/json/orders.json");
$orders = collect(json_decode($json));
$orders->each(function ($order) {
Order::create([
"amount" => $order->amount,
"customer_id" => $order->customer_id
]);
});
}
}
Below File is database\seeders\DatabaseSeeder File
<?php
namespace Database\Seeders;
use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
// User::factory(10)->create();
// User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
$this->call([
CustomerSeeder::class,
OrderSeeder::class
]);
}
}
Below File is routes\web File
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
Comments
Post a Comment