MySQL / Eloquent属于ToMany关系 - 允许两个表相同的数据透视表?

时间:2015-07-25 10:53:57

标签: mysql database-design php eloquent

是否允许使用相同的数据透视表创建两个表,每个表彼此具有belongsToMany()关系?

这是我的用户表:

enter image description here

这是我的组织表:

enter image description here

这是数据透视表:

enter image description here

这是Eloquent User.php模型:

<?php

namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model {

    protected $table = 'users';
    public $timestamps = true;

    use Authenticatable;
    use SoftDeletes;

    protected $dates = ['deleted_at'];

    public function orgs()
    {
        return $this->belongsToMany('App\Org', 'org_user', 'org_id', 'user_id')->withPivot('role_id');
    }
}

这是Eloquent Org.php模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Org extends Model {

    protected $table = 'orgs';
    public $timestamps = true;

    use SoftDeletes;

    protected $dates = ['deleted_at'];

    public function users()
    {
        return $this->belongsToMany('App\User', 'org_user', 'org_id, user_id')->withPivot('role_id');
    }

}

这样做可以吗? (即使用共享数据透视表)有经验的人是否可以预见到任何问题?或者也许有人可以对标准做法发表评论/分享一些见解?

1 个答案:

答案 0 :(得分:2)

绝对可以!这是多对多关系之美,实际上http://laravel.com/docs/4.2/eloquent#many-to-many的示例中setVisible(true)User类都设置为Role。在这种情况下(并且听起来像在你的情况下),用户可以拥有多个角色,每个角色可以与多个用户相关联。

关于你的最后两个问题,让我暂停的唯一部分是在数据透视表中使用belongsToMany。您提供的代码没有详细说明服务的目的。只要用户只有一个与组织相关联的角色,这很好,但如果它可能不止一个,我建议另一个表来保存用户组织角色关系。