2015-08-18 30 views
3

我有3个表格:用户,语言和级别Laravel 5.1 - 三个表之间的数据透视表,更好的选择?

一个用户有很多种语言和级别。

例子:

  • 豪尔赫说:英语先进,西班牙语基础。
  • 彼得说:英语先进,意大利语中,法语基础。
  • 路易斯语:西班牙语高级,英语高级,意大利语中等。

表用户

+----------+-------------+------+-----+---------+----------------+ 
| 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

嗯,我有使用三个表和枢纽项目中的东西,所以我跑:

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; 
+0

我是欢迎您阿米戈安瓦尔萨米恩托。 – Alexd2

+0

De nada estamos para servir –

+0

添加,同步用户 - >语言/级别 $ languages_levels = [1 => ['level_id'=> 4],2 => ['level_id'=> 3]]; $ user-> languages() - > sync($ languages_levels); – Alexd2

0

您没有发布您的关系,但您可以创建数据透视表的单独模型。因此,您可以在该枢轴模型中定义与用户模型,语言模型和级别模型的关系。

相关问题