我有一个3路数据透视表,可以将角色与特定组织的用户联系起来。以下是相关表格的设置方法:
//users table
Schema::create('users', function($table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('username', 30)->index();
//more (irrelevant) fields here
$table->timestamps();
});
//roles table
Schema::create('roles', function(Blueprint $table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name', 100)->index();
$table->string('description', 255)->nullable();
$table->timestamps();
});
//organizations table
Schema::create('organizations', function(Blueprint $table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name', 255);
$table->string('slug', 100);
$table->text('description');
$table->timestamps();
});
//organization user role table
Schema::create('organization_user_role', function(Blueprint $table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('role_id')->unsigned()->index();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$table->integer('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('organization_id')->unsigned()->index();
$table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade');
$table->timestamps();
});
每个用户都可以属于一个或多个具有一个或多个角色的组织。角色同时与用户和组织 绑定。也就是说,用户必须在组织中具有角色才能与其相关联。
这似乎不符合传统的多对多关系枢轴表的模式,它与Eloquent开箱即用。 Eloquent可以处理这种关系吗,还是我需要一个专门处理这种关系的新模型?有人可以告诉我用户,组织和角色模型将3向数据透视表关系与Eloquent联系在一起的样子吗?
答案 0 :(得分:2)
检查出来:http://github.com/jarektkaczyk/Eloquent-triple-pivot
它有效,但我不称之为完全解决方案。你仍然可以建立自己的。