PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Doktrin JSON-Spalte in postgresql speichert Objekte oder Arrays derselben Daten

Verrückte Requisiten an @Dave Redfern auf Slack, der auf mein Problem hingewiesen hat. Wenn ein indiziertes Array ungleich Null übergeben wird, wird es als Objekt interpertiert.

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

Ausgabe wird sein:

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

Die Lösung ist also einfach, ich bin mein Setter:

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

In Zukunft ist es auch eine bessere Vorgehensweise, Datenbankbeziehungen zu den Rollen zu verwenden. Die Suche nach JSON-Daten macht keinen Spaß, ist aber in einem Join gängige Praxis.