Laravel 5.1-三个表之间的数据透视表,更好的选择? [英] Laravel 5.1 - pivot table between three tables, better option?

查看:116
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆