我试图让其他应用程序更容易读取多态关系的存储值。目前,多态模型类型存储为模型的FQCN。使用Laravel Docs中的示例,imageable_type可以是" App \ Product"或" App \ Staff"。但是,如果任何非laravel应用程序不基于此约定并且也访问同一数据库,则此值可能会更难管理。此外,如果模型FQCN被重构,您必须修改其他应用程序以考虑更改。
有没有办法将类型更改为更一致和可读的内容,然后有一个映射类将键映射到模型? (例如,有"产品"映射到" App \ Product")
答案 0 :(得分: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,
]);
答案 1 :(得分:-1)
如果要将morphMap方法添加到服务提供者,则可能需要使用
'product' => \App\Product::class
(" \"在App之前),否则您的命名空间可能是错误的。