2013-05-31 3 views
5

Я новичок в Laravel и Eloquent (и у меня есть минимальный опыт работы с ORM в целом).Eloquent/Laravel Трёхсторонняя связь «многие-ко-многим»

Скажем, у меня есть три таблицы базы данных:

  1. Widgets
  2. действие
  3. Пользователей

Я смоделированная одну таблицы перехода, которая имеет столбцы:

  1. widget_id
  2. action_id
  3. user_id
  4. метка времени

Точка перехода должна вести журнал взаимодействий - принять метку времени каждый раз, когда user выполняет action на widget. Я вижу, как моделировать простые отношения «многие-ко-многим» с использованием Eloquent и прекрасно работать, но я не уверен, как моделировать более сложные трехсторонние отношения.

Впрочем, даже если бы я просто много-ко-многим (скажем widget к action так что бы таблица называется action_widget), как я могу добавить явную модель для action_widget таблицы в красноречив, для цель отслеживания дополнительных данных о каждой связи (например, отметка времени, поле комментариев и т. д.). Или, я просто иду об этом совершенно неправильно?

Будучи новым для ORM, я чувствую себя очень ограниченным тем, что я могу сделать! Уходит ли это чувство? : p

ответ

11

сводная информация для постановки ставки хорошо если у вас есть 2 way отношение подобный Categoty < -> Article. , но если у вас 3-стороннее отношение, я думаю, что лучше иметь модель под названием WidgetUserAction.

Редактировать: Для этих случаев новый «hasManyThrough» отлично работает.

+0

Спасибо, используя пользовательскую модель, определенно кажется лучшим решением здесь. – Raolin

+3

Не могли бы вы немного рассказать о том, как вы это сделаете? Я столкнулся с подобной проблемой, но я недостаточно знаю об Eloquent, чтобы следовать ей, и документы недостаточно хороши. – Mcg1978

+0

hasManyThrough не работает для этого случая. Потому что hasManyThrough не возвращает отношение, а только значение третьего атрибута. – Mesuti

0

Laravel может автоматически создавать промежуточную модель. Их называют «сводными таблицами».

Предлагаю вам прочитать this section in the documentation.

+0

Я играл с этим и думаю, что мне больше нравится ответ Милада для моего дела. Существуют ли другие причины для использования метода сводной таблицы? – Raolin

+0

Не совсем, я еще не пробовал. Специальная модель промежуточной таблицы звучит как хорошая идея. – Franz

Смежные вопросы