如何将我的所有类型收集到laravel中的一个表中?

时间:2017-03-07 12:01:03

标签: php laravel

我有多个类型表,我指定其他表的类型。我使用这些类型进行表单选择或其他使用。例如,我有一个users表和user_types。我有文章和article_types。我有图像和image_types。但我想要的是为所有这些和其他表使用一个表。我可以使用什么关系和系统?

users
id  name  surname  type
1   john  doe      1
2   jane  doe      2

user_types
id  title
1   Writer
2   Reader

articles
id  title  type  text
1   a man  1     a man is...
2   red B  3     there are ...

article_types
id  title
1   Story
2   News
3   Report

...

在这里,我可以为用户使用一对多关系:

class User extends Model
{
   public function type()
   {
       return $this->belongsTo(UserType::class);
   }
}

class UserType extends Model
{
   public function users()
   {
       return $this->hasMany(User::class);
   }
}

现在我可以轻松使用:

$user = User::find(1);
$user->type()->title;

或简单地获取所有类型:

$userTypes = UserType::all();

但我想将所有类型收集到一个表中。有办法吗?或者我应该更好地选择旧式?

2 个答案:

答案 0 :(得分:1)

恕我直言,请查看Many to Many Polymorphic relations

有一个标签的例子应该适合您的类型

答案 1 :(得分:1)

查看多态关系https://laravel.com/docs/5.4/eloquent-relationships#polymorphic-relations

只需要一个模型来存储类型,例如' table_types'在必要字段中输入typeable_id,typeable_type

在模型TableType中定义关系方法

class User extends Model {
public function type() {
return $this->morphMany('App\TableType', 'typeable');
}
}

对于您想跟踪的每个表格,例如

{{1}}