Laravel 5.1-三个表之间的数据透视表,更好的选择? [英] Laravel 5.1 - pivot table between three tables, better option?
本文介绍了Laravel 5.1-三个表之间的数据透视表,更好的选择?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有3个表:用户,语言和级别.
一个用户有多种语言和级别.
One user have many languages and level.
示例:
- 豪尔赫语:英语高级,西班牙语基础. 彼得说:英语高级,意大利语中等,法语基础.
- 路易斯说:西班牙语高级,英语高级,意大利语中等
- Jorge speaking: English advanced, Spanish basic.
- Peter speaking: English advanced, Italian medium, French basic.
- Luis speaking: Spanish advanced, English advanced, Italian medium.
表格用户
+----------+-------------+------+-----+---------+----------------+
| 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 | |
+-------------+----------+------+-----+---------+----------------+
问题是,如何用三个表创建数据透视表(在doc laravel中,示例仅包含2个表)? 如何与雄辩的人交往?
The question is, how create the pivot table with three tables (in the doc laravel the example is only with 2 tables) is possible with three tables? How to relationship with eloquent?
推荐答案
好,我在一个项目中使用三个表作为数据透视表,所以我运行:
Well I have something in a project using three tables and as pivot, so I run:
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');
}
}
Modelo级别:
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');
}
}
我希望您能使用此选项,以便我用来访问所有三个表中的信息
I hope you serve this option that I use to access information from all three tables
使用:
$user = User::find(1);
$user->levels->pivot->language_id;
$user->levels->name;
$user->languages->pivot->level_id;
$user->languages->name;
这篇关于Laravel 5.1-三个表之间的数据透视表,更好的选择?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文