PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La colonna JSON della dottrina in postgresql sta memorizzando oggetti o array degli stessi dati

Pazzi oggetti di scena a @Dave Redfern su Slack che ha sottolineato il mio problema. Quando si passa un array indicizzato diverso da zero, viene interpretato come un oggetto.

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

l'output sarà:

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

Quindi la soluzione è semplice, sono il mio setter:

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

Andando avanti, è anche una pratica migliore utilizzare le relazioni di database con i ruoli. La ricerca per dati JSON non è divertente, ma in un join è una pratica standard.