What is the difference between using belongsToMany() or hasManyThrough() when defining a Many To Many relationship in Laravel?
Example:
User
Account
Account_User
So, User has a many to many relation to Account via the Account_User table. On top of being just the pivot table that defines the related Users with related Accounts, it also stores a Account_User.role
field, which determines which role a given user has in a given account.
What would the implications be of using either User belongsToMany() Account
or User hasManyThrough() Account Account_User
? Or is this essentially the same?
When decided upon a method, I guess I should use the same method for the reverse relation definition.
Let's say you have two models, let's call A
and B
:
If A
may have more than one items of B
,
and also
If B
may have more than one items of A
(think like blog posts / tags)
You have to use belongsToMany()
;
Now let's say you have 3 models, A
, B
and C
.
A
is related to B
, and B
is related to C
. But you need to access all C
's which is related to A
(over B
), then you need to use hasManyThrough()
(think like countries
-> users
-> posts
, and you need all post
s from specific country
)
hasManyThrough()
is not totally meant for many to many relationships, it's more like a shortcut.
Check the documentation links, 1, 2 (Laravel 4.2), or 3, 4 (Laravel 5.x).