【发布时间】:2018-05-12 01:45:37
【问题描述】:
是否有我可以设置的 MyModelClass $property 或我可以覆盖的 Eloquent\Model 方法以将变形映射到不同的命名空间? (不在 AppServiceProvider 中,请在模型上。)
如果你想知道丑陋的细节...... 我喜欢在不同的命名空间中分离多个模型。例如,我可能有 App\Access\User、App\Searchable\User 和 App\Orm\User。我的问题是,如果 App\Orm\User 可以通过与 phone_numbers 表 (phonable_type, phonable_id) 之间的变形来调用,那么 phonable_type 将是 App\Orm\User ,因此 App\Searchable\User 不能变形为电话号码和/或我无法通过变形电话号码来搜索用户。
如果我不能在查询生成器中的命名空间之间使用别名,那么我已经想到了一个解决方案……只是不那么漂亮。
【问题讨论】:
-
我没有完全明白这个问题。类的命名空间与 Eloquent 和模型没有什么特别的关系,您可以简单地将其设置在模型文件的顶部。这样,您可以在不同的命名空间中拥有多个具有相同名称的模型。虽然我不鼓励你广泛使用它,因为它可能会在你导入类时不注意时引入错误。
-
在变形关系中,*_type 表列值都是命名空间的,除非您在应用服务提供者中制作单个统一的变形图。
-
所以你想要不同命名空间中的相同模型但具有相同的功能(关系、属性等)?
-
我想知道是否有办法从模型类而不是应用服务提供者变形映射。
-
变形图保存在
abstract class Relation的关联数组中。所以不可能有多个类映射到同一个变形名称。为什么不为模型使用相同的类,然后使用特征将Orm、Access和Searchable功能分开?