什么是正确的关系? -Laravel

时间:2019-05-24 03:26:36

标签: php database laravel

我正在尝试为一个非营利组织建立一个地区管理系统。

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对应的可用地区(尚未分配)的列表的正确方法?

2 个答案:

答案 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');