首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拉勒维尔5.1 -三张桌子之间的枢轴表,更好的选择?

问拉勒维尔5.1 -三张桌子之间的枢轴表,更好的选择?
EN

Stack Overflow用户
提问于 2015-08-18 20:26:27
回答 2查看 2.3K关注 0票数 3

我有3个表:用户、语言和级别。

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

示例:

  • 我是:英语高级,西班牙语基础。
  • 英语高级,意大利语,法语基础。
  • 路易斯说:西班牙语先进,英语先进,意大利语中等。

表用户

代码语言:javascript
复制
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | varchar(50) | NO   |     | NULL    |                |
| lastname | varchar(50) | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

表语言

代码语言:javascript
复制
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(50) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

表级

代码语言:javascript
复制
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(50) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

枢轴台

代码语言:javascript
复制
+-------------+----------+------+-----+---------+----------------+
| 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中,示例中只有两个表)?如何与雄辩者建立关系?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-18 21:20:42

我在一个项目中使用了三个表作为枢轴,所以我运行:

代码语言:javascript
复制
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级别:

代码语言:javascript
复制
 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');
    }
    }

表格语言:

代码语言:javascript
复制
    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');
    }
    }

我希望您提供这个选项,我可以使用它来访问所有三个表中的信息。

用途:

代码语言:javascript
复制
$user = User::find(1);
$user->levels->pivot->language_id;
$user->levels->name;
$user->languages->pivot->level_id;
$user->languages->name;
票数 3
EN

Stack Overflow用户

发布于 2015-08-18 21:17:33

您没有发布您的关系,但您可以创建一个单独的模型,您的枢轴表。因此,您可以定义与用户模型、语言模型和级别模型之间的关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32082005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档