Alat peraga gila untuk @Dave Redfern di Slack yang menunjukkan masalah saya. Saat melewati larik terindeks bukan nol, larik tersebut ditafsirkan sebagai objek.
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",
])));
keluarannya adalah:
"{"0":"ROLE_SITE_DIRECTOR","2":"ROLE_TRANSLATOR","1":"ROLE_DATA_ENTRY"}"
"["ROLE_SITE_DIRECTOR","ROLE_TRANSLATOR","ROLE_DATA_ENTRY"]"
Jadi perbaikannya sederhana, saya setter saya:
$this->roles = array_values($roles);
Ke depan, ini juga merupakan praktik yang lebih baik untuk menggunakan hubungan basis data ke peran. Mencari berdasarkan data JSON tidak menyenangkan, tetapi bergabung adalah praktik standar.