От многих до многих отношений в Laravel: принадлежит ToMany() vs. hasManyThrough()
В чем разница между использованием attributesToMany() или hasManyThrough() при определении отношения Many To Many в Laravel?
Пример:
User
Account
Account_User
Таким образом, у Пользователя есть много общего с учетной записью через таблицу Account_User. Помимо того, что это только сводная таблица, которая определяет связанных пользователей со связанными учетными записями, она также сохраняет поле Account_User.role
, которое определяет, какую роль данный пользователь имеет в данной учетной записи.
Каковы были бы последствия использования User belongsToMany() Account
или User hasManyThrough() Account Account_User
? Или это по сути то же самое?
При выборе метода, я думаю, я должен использовать тот же метод для определения обратной связи.
Ответы
Ответ 1
Скажем, у вас есть две модели, позвоните A
и B
:
Если A
может иметь более одного элемента B
,
а также
Если B
может иметь более одного элемента A
(думаю, как сообщения в блоге/теги)
Вы должны использовать belongsToMany()
;
Теперь скажем, что у вас есть 3 модели, A
, B
и C
.
A
связан с B
, а B
связан с C
. Но вам нужно получить доступ ко всем C
, связанным с A
(более B
), тогда вам нужно использовать hasManyThrough()
(подумайте, что countries
→ users
→ posts
, и вам нужно все post
от конкретного country
)
hasManyThrough()
не полностью предназначен для многих-многих отношений, он скорее похож на ярлык.
Проверьте ссылки документации, 1, 2 (Laravel 4.2), или 3, 4 (Laravel 5.x).