Laravel

Many to many relationships in Laravel 8

In this article we will learn about many to many relationships in Laravel 8, many to many relationships are more complicated than one to one and one many relationships.

In this example, i will create “users”, “roles” and “role_user” tables. each table is connected with each other. now we will create many to many relationships with each other by using the laravel Eloquent Model. We will first create database migration, then model, retrieve records and then how to create records too. So you can also see database table structure on below screen.

To create many to many relationship in Laravel 8 we are going to follow the below steps. If you want to know more about the many to many relationship in Laravel you can also visit Laravel’s official site from here.

  • Install Laravel
  • Create Migration and Model
  • Write Migration Code
  • Run the Migration
  • Write Model Code
  • Retrieve the record
  • Create the record

Step-1: Download the Laravel Application

Open your command prompt under your htdocs and run the below command

composer create-project laravel/laravel laravel-relationship

Step-2: Create Migration for many to many relationships

To create migration in order to learn many to many relationship in laravel 8 we will run the below command. first, we going to create a user model and migration. The below command will create a model and migration file for users.

Note : Leave the below command if User model is already present under your app/Http/Models

php artisan make:model User -m

Now we will create a role model run the below command to create role model and migration together

php artisan make:model Role -m

Now we will create a user role model run the below command to create RoleUser model and migration together.

php artisan make:model RoleUser -m

Step -3 : Write the migration code

Go go to app/http/database and look for user_table_migration and write the below code

Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

In that folder now look for roles_table_migration and add the below code

Schema::create('roles', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->timestamps();
});

now look for roles_user_table_migration and add the below code

Schema::create('role_user', function (Blueprint $table) {
    $table->integer('user_id')->unsigned();
    $table->integer('role_id')->unsigned();

    $table->foreign('user_id')->references('id')->on('users')
        ->onDelete('cascade');
    $table->foreign('role_id')->references('id')->on('roles')
        ->onDelete('cascade');
});

Step : 4 Run the migration command

Now we will run migration to create all those tables in our database, please type the below command

php artisan migrate

Step -5 : Write the model code

Here, we will create User, Role and RoleUser table model. we will also use “belongsToMany()” for relationship of both model.

Now go to app/http/models here you can see User.php open that file and add the below code.

<?php
 
namespace App;
 
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
 
class User extends Authenticatable
{
    use Notifiable;
 
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];
 
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
 
    /**
     * The roles that belong to the user.
     */
    public function roles()
    {
        return $this->belongsToMany(Role::class, 'role_user');
    }
}

Now go to app/http/models here you can see Role.php open that file and add the below code.

<?php
 
namespace App;
 
use Illuminate\Database\Eloquent\Model;
 
class Role extends Model
{
    /**
     * The users that belong to the role.
     */
    public function users()
    {
        return $this->belongsToMany(User::class, 'role_user');
    }
}

Step: 6 Retrive the records

Now write the below code to retrive the records.

$user = User::find(1); dd($user->roles);
$role = Role::find(1); dd($role->users);

Step :7 Create the records

Now write the below code to create the records.

$user = User::find(2); $roleIds = [1, 2];$user->roles()->attach($roleIds);
$user = User::find(3); $roleIds = [1, 2];$user->roles()->sync($roleIds);
$role = Role::find(1); $userIds = [10, 11];$role->users()->attach($userIds);
$role = Role::find(2); $userIds = [10, 11];$role->users()->sync($userIds);

Read Also: One to one relationship in Laravel 8

Read Also: One to many relationship in Laravel 8

I hope you understood the many to many relationship in Laravel, if you feel any confusion feel free to comment.

Shaiv Roy

Hy Myself shaiv roy, I am a passionate blogger and love to share ideas among people, I am having good experience with laravel, vue js, react, flutter and doing website and app development work from last 7 years.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button