Mad ủng hộ @Dave Redfern trên Slack, người đã chỉ ra vấn đề của tôi. Khi truyền một mảng được lập chỉ mục khác 0, nó sẽ được xen vào dưới dạng một đối tượng.
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",
])));
đầu ra sẽ là:
"{"0":"ROLE_SITE_DIRECTOR","2":"ROLE_TRANSLATOR","1":"ROLE_DATA_ENTRY"}"
"["ROLE_SITE_DIRECTOR","ROLE_TRANSLATOR","ROLE_DATA_ENTRY"]"
Vì vậy, cách khắc phục rất đơn giản, tôi là người thiết lập của tôi:
$this->roles = array_values($roles);
Về sau, nó cũng là một thực tiễn tốt hơn để sử dụng các mối quan hệ cơ sở dữ liệu cho các vai trò. Tìm kiếm theo dữ liệu JSON không phải là thú vị, nhưng trong một kết hợp là một phương pháp tiêu chuẩn.