sql >> Base de Datos >  >> RDS >> PostgreSQL

La columna JSON de la doctrina en postgresql está almacenando objetos o matrices de los mismos datos

Felicitaciones locas a @Dave Redfern en Slack, quien señaló mi problema. Al pasar una matriz indexada distinta de cero, se interpreta como un objeto.

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

la salida será:

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

Así que la solución es simple, soy mi setter:

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

En el futuro, también es una mejor práctica usar las relaciones de la base de datos con los roles. La búsqueda por datos JSON no es divertida, pero en una combinación es una práctica estándar.