Mastering Many-to-Many Relationships in Laravel: A Step-by-Step Guide

ArjunAmrutiya
3 min readOct 23, 2023

--

Introduction:
Laravel, a renowned PHP framework in the realm of web development, is admired for its elegant syntax and feature-rich environment. Among its many strengths is the Eloquent ORM, a powerful tool for database management that excels at handling relationships between database tables. In this tutorial, we’ll dive into the intricacies of many-to-many relationships in Laravel.

This guide will lead you through the process of establishing, managing, and fully utilizing many-to-many relationships in Laravel. Whether you’re a Laravel newcomer or looking to deepen your knowledge of the Eloquent ORM, this step-by-step tutorial will provide a comprehensive understanding of many-to-many relationships.

Prerequisites

Before we dive in, make sure you meet these prerequisites:

  • A basic understanding of PHP
  • Composer installed on your system
  • Laravel installed (if not, consult Laravel’s official documentation for guidance)

Step 1: Setting Up the Laravel Project

If you haven’t done so already, create a new Laravel project using the following command:

composer create-project --prefer-dist laravel/laravel many-to-many-relationship

Navigate to your project directory:

cd many-to-many-relationship

Step 2: Database Configuration

Now, let’s set up a database and configure it in your .env file. Open the .env file and set the DB_DATABASE, DB_USERNAME, and DB_PASSWORD variables to match your database settings.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_database_username
DB_PASSWORD=your_database_password

After configuring your database, execute the migrations to create the necessary tables:

php artisan migrate

Step 3: Creating Models

Next, we’ll create two models to represent a many-to-many relationship. For this example, let’s work with a Student model and a Course model.

php artisan make:model Student
php artisan make:model Course

Step 4: Define the Relationship

In your Student model, establish the many-to-many relationship with the Course model by creating a courses method. This method utilizes the belongsToMany Eloquent relationship:

// app/Student.php
public function courses()
{
return $this->belongsToMany(Course::class);
}

In your Course model, define the inverse of the relationship by creating a students method. This method also utilizes the belongsToMany Eloquent relationship:

// app/Course.php
public function students()
{
return $this->belongsToMany(Student::class);
}

Step 5: Creating and Retrieving Records

You can now create and retrieve records using the many-to-many relationship. Here’s how you can add students to courses:

// Create students
$student1 = new Student(['name' => 'Alice']);
$student2 = new Student(['name' => 'Bob']);
$student1->save();
$student2->save();

// Create courses
$course1 = new Course(['title' => 'Mathematics']);
$course2 = new Course(['title' => 'History']);
$course1->save();
$course2->save();

// Enroll students in courses
$student1->courses()->attach($course1);
$student1->courses()->attach($course2);
$student2->courses()->attach($course1);

To retrieve the courses a student is enrolled in:

$student = Student::find(1);
$courses = $student->courses;

Conversely, to retrieve the students enrolled in a course:

$course = Course::find(1);
$students = $course->students;

Step 6: Updating and Deleting Records

Updating and deleting related records is straightforward. To update a student’s details:

$student = Student::find(1);
$student->update(['name' => 'Alicia']);

To remove a student from a course:

$student = Student::find(1);
$student->courses()->detach($course1);

Conclusion

In this tutorial, we’ve delved into creating and managing many-to-many relationships in Laravel. A strong grasp of Eloquent relationships is essential for building complex applications using Laravel’s formidable ORM.

By following the steps outlined in this guide, you’ve gained a solid foundation for working with many-to-many relationships in Laravel. As you continue exploring Laravel, you’ll appreciate the flexibility and convenience that Eloquent offers for managing a wide range of relationship types in your database.

Laravel’s Eloquent ORM is a powerful tool, and mastering its features, including many-to-many relationships, will make you a more efficient and capable developer. Happy coding!

Stay tuned for more Laravel tutorials and tips on our blog!

Go forth and get more out of your content. Go forth and conquer Medium! (and while you’re at it, follow me on Medium! and feel free to Subscribe)

Found this post useful? Kindly tap the 👏 button below! :)

🌟 Enjoy my blogging content? Support my work by buying me a virtual coffee on BuyMeACoffee! Your contributions help fuel insightful tech articles. Join hands in making coding more accessible and exciting for all. https://www.buymeacoffee.com/arjunamrutiya🚀

--

--

ArjunAmrutiya

👋 Hey there! I'm Arjun Amrutiya, a passionate web developer and blogger who loves all things PHP, Laravel and Vue.js. Welcome to my Medium account!