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

时间:2017-04-19 13:00:02

标签: laravel database-design eloquent polymorphism laravel-5.4

我正在尝试确定描述类型的关系的许多最佳方法是使用Laravel。例如,我可能有一个可以有多种类型的用户模型。我曾经教过的所有内容都表明我需要创建一个users_types。但是,如果我想使用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'

如果我有一堆模型并且每个模型可能具有“类型”或“状态”,这似乎很快就会变得荒谬。

创建单个类型表或单个状态表并使用多态关系管理所有内容或者数据库设计是否错误会更好吗?有没有更好的方法来使用Query Builder而不是Eloquent来实现这一目标?

1 个答案:

答案 0 :(得分:0)

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

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

typable_type
type_id | typable_id | typable_type

type
id | name

并使用:

public function type() {
      return $this->morphToMany(Type::class,"type");
}     

在你的情况下,无论如何你都无法做到这一点。然而,有一个语义原因。例如:

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