Laravel 5.1 - 在三个 table 之间调整 table,更好的选择?
Laravel 5.1 - pivot table between three tables, better option?
我有 3 个 table:用户、语言和级别。
一个用户有多种语言和级别。
示例:
- 豪尔赫口语:高级英语,基础西班牙语。
- Peter 说:英语高级,意大利语中等,法语基础。
- Luis 口语:西班牙语高级,英语高级,意大利语中级。
Table 用户
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| lastname | varchar(50) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
Table 语言
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
Table 关卡
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
枢轴table
+-------------+----------+------+-----+---------+----------------+
| 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 | |
+-------------+----------+------+-----+---------+----------------+
问题是,如何创建具有三个 table 的枢轴 table(在文档 laravel 中,该示例仅包含 2 个 table)三个 table ?
如何与eloquent建立关系?
你没有 post 你的关系,但你可以创建一个单独的枢轴模型 table。因此,您可以在该数据透视模型中定义与用户模型、语言模型和级别模型的关系。
嗯,我在一个项目中有一些东西使用三个表作为数据中心,所以我 运行:
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');
}
}
Table 语言:
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;
我有 3 个 table:用户、语言和级别。
一个用户有多种语言和级别。
示例:
- 豪尔赫口语:高级英语,基础西班牙语。
- Peter 说:英语高级,意大利语中等,法语基础。
- Luis 口语:西班牙语高级,英语高级,意大利语中级。
Table 用户
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| lastname | varchar(50) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
Table 语言
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
Table 关卡
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
枢轴table
+-------------+----------+------+-----+---------+----------------+
| 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 | |
+-------------+----------+------+-----+---------+----------------+
问题是,如何创建具有三个 table 的枢轴 table(在文档 laravel 中,该示例仅包含 2 个 table)三个 table ? 如何与eloquent建立关系?
你没有 post 你的关系,但你可以创建一个单独的枢轴模型 table。因此,您可以在该数据透视模型中定义与用户模型、语言模型和级别模型的关系。
嗯,我在一个项目中有一些东西使用三个表作为数据中心,所以我 运行:
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');
}
}
Table 语言:
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;