This question was migrated来自数据库管理员堆栈交换,因为它可以在堆栈溢出时得到响应。
Migrated四年前。
允许有两个表,每个表都有一个belongToMany()关系,使用同一个透视表吗?
这是我的用户表:
这是我的组织表:
这里是数据透视表:
下面是雄辩的User.php模型:
下面是雄辩的Org.php模型:
这样可以吗?(即使用共享的透视表)有经验的人预见到这里的任何问题吗?或者有人可以评论一下标准做法/分享一些见解?
Migrated四年前。
允许有两个表,每个表都有一个belongToMany()关系,使用同一个透视表吗?
这是我的用户表:
这是我的组织表:
这里是数据透视表:
下面是雄辩的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的例子中User
和Role
类都设置了belongsToMany
。认为在这种情况下(听起来也像你的情况),一个用户可以有多个角色,每个角色可以与多个用户相关联。
关于最后两个问题,唯一让我停顿的部分是在pivot表中使用role_id
。你提供的代码没有详细说明它的用途。只要用户只拥有一个与组织相关联的角色,这是可以的,但如果它可以是多个角色,我建议使用另一个表来保存该用户与组织的角色关系。
关于mysql - MySQL/ Eloquent belongsToMany关系-允许两个表相同的数据透视表吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31633264/
10-13 04:46