How To Create a One To Many Relationship in Laravel 10?

20-Apr-2023

.

Admin

How To Create a One To Many Relationship in Laravel 10?

Hi friends,

Today I explain how to create a one-to-many relationship in Laravel 10. so now in this tutorial, I will show you Laravel 10 one to many eloquent relationships. 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 10.

Using one-to-many relationships, you can perform crud (create, read, update, delete) operations with the eloquent model from the database table in Laravel 10.

So let's start following example:

Step 1: Download Laravel


Let us begin the tutorial by installing a new Laravel application. if you have already created the project, then skip the following step.

composer create-project laravel/laravel example-app

Step 2: Add Migrations

Now we have to create a migration of the "posts" and "comments" tables. we will also add a foreign key to the posts table. so let's create like as below:

php artisan make:migration create_posts_table

database\migrations\2014_10_12_000000_create_posts_table

<?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');

}

};

comments table migration:

php artisan make:migration create_comments_table

database\migrations\2014_10_12_000000_create_comments_table

<?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: Add 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 Post

app/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);

}

}

Comment Model:

php artisan make:model Comment

app/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 artisan make:controller PostController

app/Http/Controllers/PostController.php

<?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);

}

}

app/Http/Controllers/PostController.php

<?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: Add Records:

app/Http/Controllers/PostController.php

<?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);

}

}

app/Http/Controllers/PostController.php

<?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]);

}

}

app/Http/Controllers/PostController.php

<?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..

#Laravel 10