【问题标题】:Can I put a morph map "alias" in a laravel eloquent model?我可以在 laravel eloquent 模型中放置变形图“别名”吗?
【发布时间】: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 功能分开?

标签: laravel eloquent


【解决方案1】:

好的,想通了...我能够重载 newMorphMany 并将 App\Search\Loan 更改为 App\Orm\Loan 附加到备注 (cmets) 表。

protected function newMorphMany(Builder $query, Model $parent, $type, $id, $localKey)
    {
    //switch namespaces
    $parent = new \App\Orm\Loan();
    return parent::newMorphMany($query, $parent, $type, $id, $localKey);
    }

【讨论】:

  • 我认为另一种方法是将 morphmap 移动到配置文件中,然后即时更新配置。
  • @JonasStaudenmeir 会做,当我摆姿势时会做回来,但它说我必须等待 2 天 - 然后我忘记了。你似乎有很多点。如果你和版主有联系,也许你可以把它传递下去。
猜你喜欢
  • 1970-01-01
  • 2021-04-30
  • 2017-10-07
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 2020-02-27
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多