多对多的关系

时间:2014-08-18 09:01:23

标签: laravel laravel-4 eloquent

我已经阅读了关于人际关系的文档并提出了一些问题。

我有一个用户和一个角色表。这种关系很多很多。用户具有许多角色,角色可以属于许多用户。所以我设置了一个数据透视表,并在每个模型中使用了belongsToMany。但肯定是用户拥有多个角色和一个角色 belongsToMany 用户。

但是当我使用hasMany时,我的查询无法按预期工作。这只是一个措辞,两者都应该属于MajorMany?

我还想了解如何定义每个模型的关系 - 您是否需要或者只能在用户上定义?

2 个答案:

答案 0 :(得分:1)

我建议你,研究这个描述: http://scotch.io/tutorials/php/a-guide-to-using-eloquent-orm-in-laravel

对你有用。

(你应该只使用" belongsToMany"在每个模型中没有" hasMany")

用户模型:

// app/models/User.php
<?php

class User extends Eloquent {

    // each user BELONGS to many role
    // define our pivot table also
    public function roles() {
        return $this->belongsToMany('Role', 'users_roles', 'user_id', 'role_id');
    }

}

角色模型:

// app/models/Role.php
<?php

class Role extends Eloquent {

    // DEFINE RELATIONSHIPS --------------------------------------------------
    // define a many to many relationship
    // also call the linking table
    public function users() {
        return $this->belongsToMany('User', 'users_roles', 'role_id', 'user_id');
    }

}

答案 1 :(得分:1)

hasMany关系用于定义一对多关系,这就是为什么它会破坏您的查询。

我可以看到为什么你在思考一个有很多角色的用户,但是说一个用户属于很多角色并且角色属于很多用户也是非常好的英语。

如果您只是查询一个模型及其关系,则不需要在两个模型上定义关系。但是你能否明确地说你永远不需要查询角色关系?