Каковы были бы правильные отношения?- Ларавел - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь построить систему управления территорией для некоммерческой организации.

Смысл 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 type_id?

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Вам нужно получить все назначенные тертерии для определенного type_id, затем нужно найти оставшиеся теритерии из таблицы территорий.

$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');
0 голосов
/ 24 мая 2019

Вы можете использовать eloquent.

Если у пользователя может быть только 1 территория, то это от 1 до 1 Если у пользователя может быть много территорий, то от 1 до многих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...