Bird
Raised Fist0
Laravelframework~5 mins

Many-to-many (belongsToMany) in Laravel - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the belongsToMany relationship represent in Laravel?
It represents a many-to-many relationship between two models, where each model can be related to many instances of the other.
Click to reveal answer
beginner
How do you define a many-to-many relationship in a Laravel model?
You define a method in the model that returns $this->belongsToMany(RelatedModel::class);.
Click to reveal answer
beginner
What is the purpose of the pivot table in a many-to-many relationship?
The pivot table stores the links between the two related models, holding their foreign keys to connect them.
Click to reveal answer
intermediate
How can you access additional data stored in the pivot table in Laravel?
By using the withPivot('column_name') method on the belongsToMany relationship to include extra pivot columns.
Click to reveal answer
beginner
How do you attach a related model in a many-to-many relationship?
Use the attach() method on the relationship, passing the related model's ID, e.g., $user->roles()->attach($roleId);.
Click to reveal answer
Which method defines a many-to-many relationship in Laravel?
AbelongsToMany()
BhasOne()
ChasMany()
DbelongsTo()
What does the pivot table contain in a many-to-many relationship?
ANo data, just a name
BOnly primary keys of one model
CAll columns of both models
DForeign keys of both related models
How do you include extra pivot table columns in your Laravel query?
AwithColumns()
BwithPivot()
CwithExtra()
DwithData()
Which method adds a related model to a many-to-many relationship?
Aattach()
Badd()
Clink()
Dconnect()
If you want to remove a related model from a many-to-many relationship, which method do you use?
Aremove()
Bdelete()
Cdetach()
Dunlink()
Explain how to set up a many-to-many relationship between two Laravel models.
Think about how two things can be connected many times both ways.
You got /3 concepts.
    Describe how to access and use extra data stored in the pivot table of a many-to-many relationship.
    Extra info in the middle table can be included in queries.
    You got /2 concepts.

      Practice

      (1/5)
      1. What does the belongsToMany() method define in a Laravel model?
      easy
      A. A polymorphic relationship between models
      B. A one-to-one relationship between two models
      C. A one-to-many relationship from one model to another
      D. A many-to-many relationship between two models

      Solution

      1. Step 1: Understand relationship types in Laravel

        Laravel provides different methods to define relationships: one-to-one, one-to-many, many-to-many, and polymorphic.
      2. Step 2: Identify the purpose of belongsToMany()

        The belongsToMany() method specifically defines a many-to-many relationship where both models can have multiple related models.
      3. Final Answer:

        A many-to-many relationship between two models -> Option D
      4. Quick Check:

        belongsToMany() = many-to-many [OK]
      Hint: belongsToMany means many-to-many link between models [OK]
      Common Mistakes:
      • Confusing belongsToMany with hasOne or hasMany
      • Thinking it defines one-to-one relationships
      • Assuming it creates a polymorphic relation
      2. Which of the following is the correct syntax to define a many-to-many relationship in a Laravel model named Post related to Tag?
      easy
      A. public function tags() { return $this->belongsToMany(Tag::class); }
      B. public function tags() { return $this->hasMany(Tag::class); }
      C. public function tags() { return $this->hasOne(Tag::class); }
      D. public function tags() { return $this->morphToMany(Tag::class); }

      Solution

      1. Step 1: Recall the method for many-to-many relationships

        In Laravel, many-to-many relationships use the belongsToMany() method inside the model.
      2. Step 2: Match the syntax to the correct method

        The correct syntax is public function tags() { return $this->belongsToMany(Tag::class); } to link Post and Tag models.
      3. Final Answer:

        public function tags() { return $this->belongsToMany(Tag::class); } -> Option A
      4. Quick Check:

        belongsToMany() syntax = public function tags() { return $this->belongsToMany(Tag::class); } [OK]
      Hint: Use belongsToMany() for many-to-many syntax [OK]
      Common Mistakes:
      • Using hasMany instead of belongsToMany
      • Using hasOne which is one-to-one
      • Confusing morphToMany with belongsToMany
      3. Given the following code in a Laravel model User:
      public function roles() {
          return $this->belongsToMany(Role::class);
      }
      
      $user = User::find(1);
      $roles = $user->roles()->pluck('name');
      echo $roles->toJson();
      What will be the output if user 1 has roles named "admin" and "editor"?
      medium
      A. Syntax error
      B. ["1","2"]
      C. ["admin","editor"]
      D. null

      Solution

      1. Step 1: Understand the belongsToMany relationship usage

        The roles() method returns all roles related to the user via the pivot table.
      2. Step 2: Analyze the pluck and toJson methods

        The pluck('name') extracts the 'name' field from each related role, returning a collection of role names. toJson() converts this collection to a JSON string.
      3. Final Answer:

        ["admin","editor"] -> Option C
      4. Quick Check:

        pluck('name') + toJson() = role names JSON [OK]
      Hint: pluck('name') gets names; toJson outputs JSON array [OK]
      Common Mistakes:
      • Expecting IDs instead of names
      • Thinking roles() returns null if no roles
      • Confusing pluck with get
      4. What is wrong with this Laravel many-to-many relationship definition in the Product model?
      public function categories() {
          return $this->hasMany(Category::class);
      }
      medium
      A. The method name should be singular, like category()
      B. It should use belongsToMany() instead of hasMany()
      C. The related model class name is incorrect
      D. No return statement is needed

      Solution

      1. Step 1: Identify the relationship type

        Products and categories usually have a many-to-many relationship, so belongsToMany() is the correct method.
      2. Step 2: Check the method used

        The code uses hasMany(), which defines a one-to-many relationship, not many-to-many.
      3. Final Answer:

        It should use belongsToMany() instead of hasMany() -> Option B
      4. Quick Check:

        Many-to-many needs belongsToMany(), not hasMany() [OK]
      Hint: Many-to-many always uses belongsToMany() [OK]
      Common Mistakes:
      • Using hasMany for many-to-many
      • Naming method singular for plural relation
      • Omitting return statement
      5. You have two models, Student and Course, linked by a many-to-many relationship using a pivot table course_student. You want to attach a course with ID 5 to a student with ID 3 and also store the enrollment date in the pivot. Which code snippet correctly does this?
      hard
      A. $student = Student::find(3); $student->courses()->attach(5, ['enrolled_at' => now()]);
      B. $student = Student::find(3); $student->courses()->save(5, ['enrolled_at' => now()]);
      C. $student = Student::find(3); $student->courses()->sync(5, ['enrolled_at' => now()]);
      D. $student = Student::find(3); $student->courses()->attach([5]);

      Solution

      1. Step 1: Understand attaching in many-to-many with pivot data

        The attach() method adds a record to the pivot table and accepts the related model ID plus an array of extra pivot data.
      2. Step 2: Analyze each option

        $student = Student::find(3); $student->courses()->attach(5, ['enrolled_at' => now()]); correctly uses attach(5, ['enrolled_at' => now()]). $student = Student::find(3); $student->courses()->save(5, ['enrolled_at' => now()]); uses save() which expects a model instance, not an ID. $student = Student::find(3); $student->courses()->sync(5, ['enrolled_at' => now()]); uses sync() incorrectly with extra data. $student = Student::find(3); $student->courses()->attach([5]); attaches without pivot data.
      3. Final Answer:

        $student = Student::find(3); $student->courses()->attach(5, ['enrolled_at' => now()]); -> Option A
      4. Quick Check:

        attach(id, pivotData) = $student = Student::find(3); $student->courses()->attach(5, ['enrolled_at' => now()]); [OK]
      Hint: Use attach(id, pivotData) to add with extra pivot info [OK]
      Common Mistakes:
      • Using save() with ID instead of model instance
      • Using sync() incorrectly with pivot data
      • Forgetting to pass pivot data array
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard