我有3个表:用户,语言和水平。
一个用户可以有多种语言和级别。
的例子:
- 乔治说:英语高级,西班牙语基本。彼得的语言:英语高级,意大利语中等,法语基本。
- Luis语言:西班牙语高级,英语高级,意大利语中等。
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| lastname | varchar(50) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
表语言+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
表水平+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
数据透视表
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | | NULL | |
| language_id | int(11) | NO | | NULL | |
| level_id | int(11) | NO | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+-------------+----------+------+-----+---------+----------------+
问题是,如何创建具有三个表的数据透视表(在文档laravel中示例仅包含2个表)可以使用三个表?如何与雄辩者相处?
我在一个项目中有一些东西,使用三个表作为pivot,所以我运行:
Modelo User:
class User extends Model{
public function levels(){
return $this->belongsToMany('App'Level','name pivot table')->withPivot('language_id');
}
public function languages(){
return $this->belongsToMany('App'Language','name pivot table')->withPivot('level_id');
}
}
莫德罗级别:
class Level extends Model{
public function users(){
return $this->belongsToMany('App'User','name pivot table')->withPivot('language_id');
}
public function languages(){
return $this->belongsToMany('App'Language','name pivot table')->withPivot('user_id');
}
}
表语言: class Language extends Model{
public function users(){
return $this->belongsToMany('App'User','name pivot table')->withPivot('level_id');
}
public function levels(){
return $this->belongsToMany('App'Level','name pivot table')->withPivot('user_id');
}
}
我希望您提供这个选项,我使用它来访问所有三个表中的信息
使用:
$user = User::find(1);
$user->levels->pivot->language_id;
$user->levels->name;
$user->languages->pivot->level_id;
$user->languages->name;
您没有发布您的关系,但是您可以为数据透视表创建一个单独的模型。所以你可以在pivot模型中定义与用户模型,语言模型和级别模型的关系。