我正在尝试为一个非营利组织建立一个地区管理系统。
TMA的重点是将地区分配给不同的用户。 用户可以请求分配给某个地区,而SuperAdmin可以拒绝或确认。
每个地区都有不同的类型(例如:A型,B型和C型)。 每个用户还具有不同的类型(A,B或C)
一个用户只能查看和请求相同类型的区域,并且只能查看和请求当前未分配给另一个用户的区域。
(例如:A型用户可以查看和请求A型地区)。
territories
- id
- type_id
- name
users
- id
- type_id
- name
types
- id
- name
assignments
- id
- territory_id
- user_id
- status (enum: confirmed, declined, requested, canceled)
我尝试建立关系,但是发现这并不简单。 (或者我只是做得不好)
这应该通过查询生成器完成吗?如果是这样,什么是检索与Auth User type_id对应的可用地区(尚未分配)的列表的正确方法?
答案 0 :(得分:0)
您可以雄辩地发言。
如果用户只能拥有1个地区,则其范围是1比1 如果用户可以拥有多个区域,则其范围就是1到许多。
答案 1 :(得分:0)
您需要检索特定type_id
的所有分配的teriteri,然后需要从地区表中查找剩余的teriteri。
$user = Auth::user();
$same_type_users = DB::table('users')->where('type_id',$user->type_id)->pluck('id');
$all_assigned_teritory = DB::table('assignments')->where('user_id','IN',$same_type_users)->pluck('id');
$available_teritories= DB::table('territories')->where('id', 'NOT IN', $all_assigned_teritory)->where('type_id' , $user->type_id)->value('email');