2013-05-31 91 views
5

我是Laravel和Eloquent的全新品牌(我對ORM的一般經驗很少)。Eloquent/Laravel三方多對多關係

比方說,我有三個數據庫表:

  1. 小工具
  2. 操作
  3. 用戶

我已經仿照有列一個結表:

  1. widget_id
  2. action_id
  3. user_id
  4. 時間戳

交界處的一點是要保持一個日誌互動 - 以時間戳每一個user執行上widgetaction時間。我看到如何使用Eloquent來建立一個簡單的多對多關係,並讓這個工作正常,但我不知道如何建模一個更復雜的三方關係。

對於這個問題,即使我有一個簡單的許多一對多的關係(比如widgetaction所以會有一個表稱爲action_widget),我怎麼可以添加一個明確的模型,在洋洋灑灑的action_widget表中,跟蹤關於每個關係的額外數據(例如時間戳,評論字段等)的目的。或者,我是否以完全錯誤的方式去解決這個問題?

作爲ORM的新手,我感到非常侷限於我能做什麼!這種感覺會消失嗎? :p

回答

11

樞軸工作正常,當你有2種方式的關係像Categoty < - >文章。 但如果你有3種方式的關係,我認爲最好有一個名爲WidgetUserAction的模型。

編輯:對於這些情況下,新的「hasManyThrough」正常工作。

+0

謝謝,使用定製模型絕對看起來像是這裏最好的解決方案。 – Raolin

+3

你能否解釋一下你將如何去做這件事?我面臨着類似的問題,但我對Eloquent不夠了解,並且文檔不夠好。 – Mcg1978

+0

hasManyThrough不適用於這種情況。因爲hasManyThrough不返回關係而只是第三個屬性的值。 – Mesuti

0

Laravel可以自動創建中間模型。他們被稱爲「數據透視表」。

我建議你閱讀this section in the documentation

+0

我玩過這個,覺得我更喜歡Milad對我的情況的回答。數據透視表方法有什麼其他原因嗎? – Raolin

+0

不是,我還沒有嘗試過。中間表的自定義模型聽起來像是一個好主意。 – Franz