Laravel / eloquent и Postgres, как я могу установить связь с таблицей, которая имеет «различное имя столбца и количество столбцов»? - PullRequest
0 голосов
/ 05 июля 2019

У меня есть таблица с учетными записями, учетные записи могут иметь различное количество учетных данных, и имя учетных данных может меняться.Мой подход к этой проблеме состоял в том, чтобы создать связь между учетными записями и ключами, одна учетная запись может иметь много ключей.Я использовал key_name для хранения имени ключа и key_value для хранения значения ключа.У меня проблемы с поворотом таблицы ключей в Postgres.Microsoft упростила поворот с помощью функции PIVOT.Теперь с postgres это кажется сложным.Для того, что я помню

table                  table
accounts         |     keys           
id    store_id   |    account_id     key_name      key_value   
1       1        |      1              'api_key'     'api_key_value1'
2       2        |      1              'password'    'pass'
                 |      2         'account_manager'   'er3re'
                 |      2             'api_key'       'er34554re'
                 |      2              'user_email',   'example@example.com'

Чтобы иметь представление о своих намерениях, я хочу создать что-то вроде этого, это всего лишь пример.Меня больше беспокоит запрос в posgres, а не в формате json.

  {
  "accounts": [
    {
      "store_id": 1,
      "keys": [
        {
          "account_id" : 1,
          "api_key": "api_key_value1",
          "password": "pass"
        }
      ]
    },
    "store_id" : 2,
     "keys" : [         
        {
          "account_id" : 2,
          "account_manager"  : "er3re"
          "api_key": "er34554re",
          "user_email": "example@example.com"
        }
       ]
  ]
}

В приведенном выше json хранилище с идентификатором 2 имеет 3 "ключа", а хранилище с идентификатором 1 - только 2. Я хочуне добавляйте ключи непосредственно в таблицу учетных записей.

Я использовал функцию crosstab () и, кажется, хорошо, если не решаю проблему реального мира.

 select * from crosstab('select account_id, key_name, key_value from keys order by 1,2') as final_result("account_id" int, key_name char(30), key_value char(30))

С помощью этой функции я теперь должен узнать, сколько ключей у каждой учетной записи есть, что этоодна из моих проблем.Исправьте, если я ошибаюсь в функции кросс-таблицы.

...