我正在使用MySQL数据库在Laravel 4.2中开发一个应用程序。我有'用户',' roles_users'和'角色'表格,' role_user'由于多对多关系而成为数据透视表。现在,在我的应用程序中将有不同类型的帐户。某些类型需要有一个独特的额外字段。该字段是外键字段,将帐户类型链接到特定表。
示例:
所以,会有一个'区域'桌子和一个'子区域'表,附加信息。对于帐户类型A,我不需要额外的字段。对于B,我需要一个' area_id'字段,以及C a' sub-area_id'领域。那些田地会去哪儿?我不认为这将是'用户'表,因为它们不是常见的字段。
如果您需要额外的信息,请告诉我,我会尽力帮助您。
答案 0 :(得分:0)
取决于您如何存储这些“区域”,如果您可以参考它们,那么就这样做。链接/存储此数据的逻辑位置位于“角色”表中,这是有关您的角色和权限的所有信息应驻留的位置。基本上你也希望能够通过一个更新来改变它,所以将它添加到'角色'就可以了,因为每个权限类型都有一行,这是用户获得权限的地方
答案 1 :(得分:0)
如果你想要干净利落并在将来扩展更多,我会做的是创建另外两个表,一个权限表和一个permission_role多对多表。
for permissions table:
$table->increments('id');
$table->integer('area_id')->unsigned();
$table->integer('subarea_id')->unsigned();
for permission_role table:
$table->increments('id');
$table->integer('permission_id')->unsigned();
$table->integer('role_id')->unsigned();
因此,您将为每个角色分配多个权限。并且会有3个角色(例如account_a,account_b,account_c)。如果你在一个区域中添加一个新的子区域,例如,一个缺点就是account_a不会自动访问它。这会有点复杂,但是如果你想在account_a访问区域x及其所有子区域(例如x1,x.2,x.3)时自动化,并且有一个新的子区域x.4,你会account_a自动获取访问权限,你可以这样做(多态 - 多对多):
for permissions table:
$table->increments('id');
$table->string('area_type'); // i.e. either "Area" or "Subarea"
$table->integer('area_access_id')->unsigned(); // this can be an ID to an "Area" or to a "Subarea"
for permission_role table:
$table->increments('id');
$table->integer('permission_id')->unsigned();
$table->integer('role_id')->unsigned();
for area table:
$table->increments('id');
$table->string('name');
for sub_area table:
$table->increments('id');
$table->integer('parent_area_id')->unsigned(); // references area.id
$table->string('name');