PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

доктрина JSON колона в postgresql съхранява обекти или масиви от едни и същи данни

Луди реквизити към @Dave Redfern в Slack, който посочи проблема ми. При предаване на ненулев индексиран масив, той се интерпретира като обект.

dump(json_encode([
    0 => "ROLE_SITE_DIRECTOR", 2 => "ROLE_TRANSLATOR", 1 => "ROLE_DATA_ENTRY",
]));
dump(json_encode(array_values([
    0 => "ROLE_SITE_DIRECTOR", 2 => "ROLE_TRANSLATOR", 1 => "ROLE_DATA_ENTRY",
])));

изходът ще бъде:

"{"0":"ROLE_SITE_DIRECTOR","2":"ROLE_TRANSLATOR","1":"ROLE_DATA_ENTRY"}"
"["ROLE_SITE_DIRECTOR","ROLE_TRANSLATOR","ROLE_DATA_ENTRY"]"

Така че поправката е проста, аз съм моят сетер:

$this->roles = array_values($roles);

Продължавайки напред, също така е по-добра практика да използвате релации на базата данни към ролите. Търсенето по JSON данни не е забавно, но при свързване е стандартна практика.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се импортира .csv в Cloud SQL от конзолата

  2. Как да сортирате резултата от string_agg()

  3. Пролетно управлявано инжектиране на bean в клас, изпълняващ RowMapper

  4. Поправяне на повредена база данни postgresql

  5. Посочени са множество стойности по подразбиране за идентификатор на колона на таблицата