Извлечение данных из модели для страницы поиска - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь создать страницу поиска, используя laravel. По сути, я хочу найти пользователей, использующих оператор OR. Я хочу найти всех пользователей, имеющих сертификацию X, Y, Z ИЛИ всех пользователей, обладающих навыками работы в сети X, Y, Z или навыком СУБД Y. Как на этом снимке экрана (http://prntscr.com/prk9pa) (Здесь я хочу найти всех пользователейкоторые имеют сертификацию BPMN ИЛИ навык SAP HANA (СУБД) и возвращают таблицу, в которой все пользователи указывают, какие критерии соответствуют. Что-то вроде:

Name | Surname | has certification | has skills
John | Smith   |        BPMN       | no skill

Мои таблицы выглядят так:

users:
id | name | surname | and so on
1  | John | Smith   | ...

certifications:
id | uid | cert_id
 1 |  1  |  10

general_certs:
id | area    |    scope     | certification (certification name)
10 | BM, I&C | Business Mng | BPMN

я имею отношение к сертификатам: пользователь один ко многим сертификатам | сертификаты один ко многим general_certs

assigned_skills:
id | skill_group_id | uid | skill_id
1  |        1       |  1  | 80

Для назначенных навыков у меня есть разные таблицы, основанные на skill_group_id, если skill_group_id равен 1, то будет получать данныеиз таблицы skill_dbms, которая структурирована следующим образом:

id | db_name
1  | MySQL
...|...
80 | SAP HANA

Здесь мои отношения почти такие же, как определено для сертификаций.

Моя функция контроллера выглядит примерно так:

      $search = User::join('certifications', 'users.id', '=', 'certifications.uid')
                      ->join('assigned_skills', 'users.id', '=', 'assigned_skills.uid')
                      ->select('users.id', 'users.name', 'users.surname', 'certifications.cert_id', 'assigned_skills.skill_id');

      // has cert?
      if(isset($request->certifications))
      {
        if(is_array($request->certifications))
        {
          $search->orWhereIn('certifications.cert_id', $request->certifications);
        }
      }
      if(isset($request->dbms))
      {
          $search->orWhereIn('assigned_skills.skill_id', $request->dbms);

      }
      // return $request;
      $res = $search->get();
      $resDistinct = $res->unique('name', 'surname');

      return $res;

Если я возвращаю $res, я получаю дублирующиеся строки:

[
   {
      "id":1,
      "name":"John",
      "surname":"Smith",
      "cert_id":10,
      "skill_id":3
   },
   {
      "id":1,
      "name":"John",
      "surname":"Smith",
      "cert_id":10,
      "skill_id":2
   },
   {
      "id":1,
      "name":"John",
      "surname":"Smith",
      "cert_id":2,
      "skill_id":80
   },
   {
      "id":1,
      "name":"John",
      "surname":"Smith",
      "cert_id":55,
      "skill_id":80
   },
   {
      "id":1,
      "name":"John",
      "surname":"Smith",
      "cert_id":105,
      "skill_id":80
   },
   {
      "id":1,
      "name":"John",
      "surname":"Smith",
      "cert_id":26,
      "skill_id":80
   },
   {
      "id":1,
      "name":"John",
      "surname":"Smith",
      "cert_id":10,
      "skill_id":80
   }
]

в этом случае. se $request->dbms равно 80 (SAP HANA) и $request->certifications равно 10. Но могут быть и массивы. И поиск производится с cert_id и skill_id

1 Ответ

0 голосов
/ 02 ноября 2019

используйте массив в нескольких полях

  $res = $search->get();
  $resDistinct = $res->unique(['nome', 'cognome']);

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