是否允许使用相同的数据透视表创建两个表,每个表彼此具有belongsToMany()关系?
这是我的用户表:
这是我的组织表:
这是数据透视表:
这是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');
}
}
这样做可以吗? (即使用共享数据透视表)有经验的人是否可以预见到任何问题?或者也许有人可以对标准做法发表评论/分享一些见解?
答案 0 :(得分:2)
绝对可以!这是多对多关系之美,实际上http://laravel.com/docs/4.2/eloquent#many-to-many的示例中setVisible(true)
和User
类都设置为Role
。在这种情况下(并且听起来像在你的情况下),用户可以拥有多个角色,每个角色可以与多个用户相关联。
关于你的最后两个问题,让我暂停的唯一部分是在数据透视表中使用belongsToMany
。您提供的代码没有详细说明服务的目的。只要用户只有一个与组织相关联的角色,这很好,但如果它可能不止一个,我建议另一个表来保存用户至组织角色关系。