Laravel 9 One To Many Relationship Example
Mar 25, 2022 . Admin
Hi friends,
Today I am explain laravel 9 one to many relationship example. In this example we will see laravel 9 one to many relationship example. A one to many relationship is used to define relationships where a single model is the parent to one or more child models. so now in this tutorial i will show you laravel 9 one to many eloquent relationship. When one table refers to many rows in another table that is called a one-to-many relationship. A one-to-many relationship is a very basic type of database relationship in laravel 9.
Laravel 9 one to many polymorphic relationship and how to use create, and retrieve records from database tables using this relationship
Using one to many relationship, you can perform crud (create, read, update, delete) operation with the eloquent model from the database table in laravel 9.
So let's start following example:
Step 1: Download LaravelLet us begin the tutorial by installing a new laravel application. if you have already created the project, then skip following step.
composer create-project laravel/laravel example-appStep 2: Create Migrations:
Now we have to create migration of "posts" and "comments" table. we will also add foreign key with posts table. so let's create like as below:
php artisan make:migration create_posts_tabledatabase/migrations/2022_3_25_000000_create_posts_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('posts', function (Blueprint $table) { $table->id(); $table->string("name"); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } };
php artisan make:migration create_comments_tabledatabase/migrations/2022_3_25_000000_create_comments_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('comments', function (Blueprint $table) { $table->id(); $table->foreignId('post_id')->constrained('posts'); $table->string("comment"); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('comments'); } };Step 3: Create Models:
Here, we will create Post and Comment table model. we will also use "hasMany()" and "belongsTo()" for relationship of both model.
php artisan make:model Postapp/Models/Post.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Post extends Model { use HasFactory; /** * Get the comments for the blog post. * * Syntax: return $this->hasMany(Comment::class, 'foreign_key', 'local_key'); * * Example: return $this->hasMany(Comment::class, 'post_id', 'id'); * */ public function comments() { return $this->hasMany(Comment::class); } }
php artisan make:model Commentapp/Models/Comment.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Comment extends Model { use HasFactory; /** * Get the post that owns the comment. * * Syntax: return $this->belongsTo(Post::class, 'foreign_key', 'owner_key'); * * Example: return $this->belongsTo(Post::class, 'post_id', 'id'); * */ public function post() { return $this->belongsTo(Post::class); } }Step 4: Retrieve Records:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Post; class PostController extends Controller { /** * Write code on Method * * @return response() */ public function index(Request $request) { $comments = Post::find(1)->comments; dd($comments); } }
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Comment; class PostController extends Controller { /** * Write code on Method * * @return response() */ public function index(Request $request) { $post = Comment::find(1)->post; dd($post); } }Step 5: Create Records:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Post; use App\Models\Comment; class PostController extends Controller { /** * Write code on Method * * @return response() */ public function index(Request $request) { $post = Post::find(1); $comment = new Comment; $comment->comment = "Hi ItSolutionStuff.com"; $post = $post->comments()->save($comment); } }
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Post; use App\Models\Comment; class PostController extends Controller { /** * Write code on Method * * @return response() */ public function index(Request $request) { $post = Post::find(1); $comment1 = new Comment; $comment1->comment = "Hi ItSolutionStuff.com Comment 1"; $comment2 = new Comment; $comment2->comment = "Hi ItSolutionStuff.com Comment 2"; $post = $post->comments()->saveMany([$comment1, $comment2]); } }
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Post; use App\Models\Comment; class PostController extends Controller { /** * Write code on Method * * @return response() */ public function index(Request $request) { $comment = Comment::find(1); $post = Post::find(2); $comment->post()->associate($post)->save(); } }
I hope it will help you..