After we created a One-To-Many relationship between both Users table and Posts table and added hasMany inside User Model, also we added the inverse relationship inside Post Model by adding belongsTo to it.
The time has come to find out how the data is saved in the database while we use this relationship.
What are the methods used in this?
These methods are divided into three basic methods:
- Without using function post.
 - By using function post.
 - By using the inverse relationship function user.
 
1.Without using function post.
Here there are two scenarios:
- First: Add only one post for the user.
 - Second: Add more than one post for the user.
 
First: Add only one post for the user.
- We first go to the 
routes/web.phpfile and add a new route so that we can test these methods. 
use App\Models\User;
use App\Models\Post;
---
Route::get('/one-to-many', function () {
    $user = User::find(1);
    Post::create([
        'user_id' => $user->id,
        'title' => 'Post title 1',
        'body' => 'Post body 1',
    ]);
    return response()->json([
        'username' => $user->username,
        'post' => $user->posts
    ]);
});
- We open the browser and go to this link 
http://127.0.0.1:8000/one-to-manyto find that one post has been successfully added to user NoisyId No. 1. 
{
  "username": "John Doe",
  "post": [
    {
      "id": 1,
      "title": "Post title 1",
      "body": "Post body 1",
      "user_id": 1,
      "created_at": "2023-08-05T03:18:22.000000Z",
      "updated_at": "2023-08-05T03:18:22.000000Z"
    }
  ]
}
Second: Add more than one post for the user.
- We first go to the 
routes/web.phpfile and edit this route. 
use App\Models\User;
use App\Models\Post;
---
Route::get('/one-to-many', function () {
   $user = User::find(2);
    Post::insert(
        [
            [
                'user_id' => $user->id,
                'title' => 'Post title 2',
                'body' => 'Post body 2',
            ],
            [
                'user_id' => $user->id,
                'title' => 'Post title 3',
                'body' => 'Post body 3',
            ],
        ]
    );
    return response()->json([
        'username' => $user->username,
        'post' => $user->posts
    ]);
});
- We open the browser and go to this link 
http://127.0.0.1:8000/one-to-manyto find that 2 posts have been successfully added to the user with ID No. 2. 
{
  "username": "Tom Cruz",
  "post": [
    {
      "id": 2,
      "title": "Post title 2",
      "body": "Post body 2",
      "user_id": 2,
      "created_at": null,
      "updated_at": null
    },
    {
      "id": 3,
      "title": "Post title 3",
      "body": "Post body 3",
      "user_id": 2,
      "created_at": null,
      "updated_at": null
    }
  ]
}
2. By using function post.
Here also there are two scenarios:
First: Add only one post for the user
Second: Add more than one post for the user
First: Add only one post for the user
- We first go to the 
routes/web.phpfile and edit this route. 
use App\Models\User;
---
Route::get('/one-to-many', function () {
    $user = User::find(3);
    $user->posts()->create([
      'title' => 'Post title 4',
      'body' => 'Post body 4',
    ]);
    return response()->json([
        'username' => $user->username,
        'post' => $user->posts,
    ]);
});
- We open the browser and go to this link 
http://127.0.0.1:8000/one-to-manyto find that one post has been successfully added to the user with ID No. 3. 
{
  "username": "Adam Smith",
  "post": [
    {
      "id": 4,
      "title": "Post title 4",
      "body": "Post body 4",
      "user_id": 3,
      "created_at": "2023-08-05T03:37:55.000000Z",
      "updated_at": "2023-08-05T03:37:55.000000Z"
    }
  ]
}
Second: Add more than one post for the user
- We first go to the 
routes/web.phpfile and edit this route. 
use App\Models\User;
---
Route::get('/one-to-many', function () {
   $user = User::find(1);
    $user->posts()->createMany([
        [
            'title' => 'Post title 5',
            'body' => 'Post body 5',
        ],
        [
            'title' => 'Post title 6',
            'body' => 'Post body 6',
        ]
    ]);
    return response()->json([
        'username' => $user->username,
        'post' => $user->posts,
    ]);
});
- We open the browser and go to this link 
http://127.0.0.1:8000/one-to-manyto find that 2 posts have been successfully added to the user with ID No. 1. 
In addition to these posts, there is another post that was added in a previous step, and therefore there should be 3 posts for this user. This is actually the data obtained from the database in the following response.
{
  "username": "John Doe",
  "post": [
    {
      "id": 1,
      "title": "Post title 1",
      "body": "Post body 1",
      "user_id": 1,
      "created_at": "2023-08-05T03:18:22.000000Z",
      "updated_at": "2023-08-05T03:18:22.000000Z"
    },
    {
      "id": 5,
      "title": "Post title 5",
      "body": "Post body 5",
      "user_id": 3,
      "created_at": "2023-08-05T03:42:27.000000Z",
      "updated_at": "2023-08-05T03:42:27.000000Z"
    },
    {
      "id": 6,
      "title": "Post title 6",
      "body": "Post body 6",
      "user_id": 3,
      "created_at": "2023-08-05T03:42:27.000000Z",
      "updated_at": "2023-08-05T03:42:27.000000Z"
    }
  ]
}
3. By using the inverse relationship function user.
- We first go to the 
routes/web.phpfile and edit this route. 
use App\Models\User;
use App\Models\Post;
---
Route::get('/one-to-many', function () {
    $user = User::find(2);
    $post = new Post([
        'title' => 'Post title 7',
        'body' => 'Post body 7',
    ]);
    $post->user()->associate($user)->save();
    return response()->json([
        'username' => $post->user->username,
        'title' => $post->title,
        'body' => $post->body,
    ]);
});
- We open the browser and go to this link 
http://127.0.0.1:8000/one-to-manyto find that a post has been successfully added to the user with ID No. 2. 
{
  "username": "Tom Cruz",
  "title": "Post title 7",
  "body": "Post body 7"
}
- You can find the repo of this series on github here
 
              
    
Top comments (0)