Laravel 5.1 -透视表之间的三个表,更好的选择


Laravel 5.1 - pivot table between three tables, better option?

我有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模型中定义与用户模型,语言模型和级别模型的关系。