2015-09-25 46 views
2

我正在嘗試使多態關係的存儲值更易於被其他應用程序讀取。目前多態模型類型被存儲爲模型的FQCN。使用Laravel Docs中的示例,imageable_type可以是「App \ Product」或「App \ Staff」。但是,如果任何非基於此約定的非超級應用程序也訪問相同的數據庫,則此值可能會更難以管理。另外,如果FQCN模型得到重構,您必須修改其他應用程序來說明更改。Laravel更改多態關係的存儲值

有沒有辦法將類型更改爲更加一致和可讀的類型,然後有一個將鍵映射到模型的映射類? (例如,將「產品」映射到「App \ Product」)

回答

9

是的。這是實施了recently的更改。


添加到您的服務提供商(在boot法):

Illuminate\Database\Eloquent\Relations\Relation::morphMap([ 
    'product' => App\Product::class 
]); 

如果你簡單地傳遞模型名稱的數組,it'll default to using the table names

Illuminate\Database\Eloquent\Relations\Relation::morphMap([ 
    App\Product::class, 
    App\Staff::class, 
]); 
+0

這完美地完成這項工作,謝謝! – robarelli

+0

現在,你甚至可以在你的模型上放置$ morphClass。 –

+0

@CaptainHypertext - 無法正常工作。使用它會導致你痛苦的世界。 –

-1

如果添加morphMap方法到服務提供商,您可能需要使用

'product' => \App\Product::class 

(「應用程序之前」),否則您的命名空間可能是錯誤的。