Laravel:多态类型表与多类型表

Laravel:多态类型表与多类型表,laravel,database-design,eloquent,polymorphism,laravel-5.4,Laravel,Database Design,Eloquent,Polymorphism,Laravel 5.4,我正试图确定用Laravel描述一种类型的关系的最佳方式是什么。例如,我可能有一个可以是多种类型的用户模型。我所学过的每一件事都会让我觉得我需要做一个简单的练习。然而,如果我想使用Eloquent引用这种关系,我还需要创建一个UserType模型和一个IdentificationType模型。例如: // User Class public function type() { return $this->belongsTo('App\UserType'); } // User Typ

我正试图确定用Laravel描述一种类型的关系的最佳方式是什么。例如,我可能有一个可以是多种类型的用户模型。我所学过的每一件事都会让我觉得我需要做一个简单的练习。然而,如果我想使用Eloquent引用这种关系,我还需要创建一个UserType模型和一个IdentificationType模型。例如:

// User Class
public function type() {
  return $this->belongsTo('App\UserType');
}

// User Type Class
public function users(){
  return $this->hasMany('App\User');
}

$user->type->description;  // Could return 'casual'
如果我有一堆模型,而且每个模型都可能有一个“类型”或“状态”,那么这似乎很快就会变得可笑


创建一个单一类型表或一个单一状态表并使用多态关系管理所有内容是更好的做法,还是糟糕的数据库设计?有没有更好的方法可以使用查询生成器而不是雄辩地实现这一点?

如果它在语义上有意义,那么使用多态关系是合理的。示例Laravel集合包含可注释实体。可评论实体可以是视频或帖子(两者都允许评论)

在您的情况下,您需要执行类似以下表格的操作:

typable_type
type_id | typable_id | typable_type

type
id | name
和使用:

public function type() {
      return $this->morphToMany(Type::class,"type");
}     
在你的情况下,没有实际的理由说明你为什么不能这样做。然而,有一个语义上的原因。例如:


用户
可以是
主要
类型,
产品
可以是
主要
类型,但是这是否意味着相同的事情?例如,简而言之,当你说“主要用户”和“主要产品”时,说“主要的一切都可以通过此页面访问”有意义吗?主要一词的含义是否相同?如果答案是肯定的,那么多态性就是你应该使用的东西

还有什么东西可以与用户的类型相同?@apokryfos让我们假设我有100个其他型号,其中可能有50个型号。现在我需要50多个类型表和50多个类型模型。当我只有一个多态类型表和一个类型模型时,这看起来很可笑。然而,我不知道这是否是“良好实践”,比如说你有一个电子商务页面,你有一个
产品
实体,它也可能有一个
类型
用户
是否有可能与
产品
共享一个类型?如果没有,将所有类型放在同一个表中是否有任何语义意义?@apokryfos绝对正确!我可以有一个类型为“primary”的产品和一个类型为“primary”的用户