sql >> Databasteknik >  >> RDS >> PostgreSQL

doktrin JSON-kolumnen i postgresql lagrar objekt eller arrayer med samma data

Galna rekvisita till @Dave Redfern på Slack som påpekade mitt problem. När du skickar en index som inte är noll, avbryts den som ett objekt.

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",
])));

utdata blir:

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

Så korrigeringen är enkel, jag är min sätter:

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

Framöver är det också en bättre praxis att använda databasrelationer till rollerna. Att söka med JSON-data är inte roligt, men i en join är standardpraxis.




  1. PHP, MYSQL, HTML-tabell med tabellsorterare

  2. php-användar-id-tilldelningen fungerar inte

  3. Wordpress till Jekyll script kasta fel

  4. MySQL rätt syntax att använda nära '' vid rad 1 fel