This question was migrated来自数据库管理员堆栈交换,因为它可以在堆栈溢出时得到响应。
Migrated四年前。
允许有两个表,每个表都有一个belongToMany()关系,使用同一个透视表吗?
这是我的用户表:
mysql - MySQL/ Eloquent belongsToMany关系-允许两个表相同的数据透视表吗?-LMLPHP
这是我的组织表:
mysql - MySQL/ Eloquent belongsToMany关系-允许两个表相同的数据透视表吗?-LMLPHP
这里是数据透视表:
mysql - MySQL/ Eloquent belongsToMany关系-允许两个表相同的数据透视表吗?-LMLPHP
下面是雄辩的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');
    }
}

下面是雄辩的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');
    }

}

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

最佳答案

你当然可以!这是多对多关系的优点,事实上http://laravel.com/docs/4.2/eloquent#many-to-many的例子中UserRole类都设置了belongsToMany。认为在这种情况下(听起来也像你的情况),一个用户可以有多个角色,每个角色可以与多个用户相关联。
关于最后两个问题,唯一让我停顿的部分是在pivot表中使用role_id。你提供的代码没有详细说明它的用途。只要用户只拥有一个与组织相关联的角色,这是可以的,但如果它可以是多个角色,我建议使用另一个表来保存该用户与组织的角色关系。

关于mysql - MySQL/ Eloquent belongsToMany关系-允许两个表相同的数据透视表吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31633264/

10-13 04:46