我有多个类型表,我指定其他表的类型。我使用这些类型进行表单选择或其他使用。例如,我有一个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();
但我想将所有类型收集到一个表中。有办法吗?或者我应该更好地选择旧式?
答案 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}}