Как десериализовать тип данных массива DC2Type, сохраненный с Doctrine в вашей базе данных

Не любой движок базы данных, как MySQL, знает, что такое сериализация PHP, поэтому вы не можете сделать это на этом уровне, что означает, что вам нужно будет делать это да или да с PHP. Поля DC2Type в doctrine хранятся в виде поля с типом LONGTEXT, поскольку MySQL не позволяет хранить массивы в базе данных, а только строки. Пример данных (строки), которые Doctrine хранит в регистре в вашей базе данных, выглядит следующим образом:

a:15:{
i:0;s:32:"ROLE_SONATA_USER_ADMIN_USER_EDIT";
i:1;s:32:"ROLE_SONATA_USER_ADMIN_USER_LIST";
i:2;s:34:"ROLE_SONATA_USER_ADMIN_USER_CREATE";
i:3;s:32:"ROLE_SONATA_USER_ADMIN_USER_VIEW";
i:4;s:34:"ROLE_SONATA_USER_ADMIN_USER_DELETE";
i:5;s:36:"ROLE_SONATA_USER_ADMIN_USER_OPERATOR";
i:6;s:34:"ROLE_SONATA_USER_ADMIN_USER_MASTER";
i:7;s:33:"ROLE_SONATA_USER_ADMIN_GROUP_EDIT";
i:8;s:33:"ROLE_SONATA_USER_ADMIN_GROUP_LIST";
i:9;s:35:"ROLE_SONATA_USER_ADMIN_GROUP_CREATE";
i:10;s:33:"ROLE_SONATA_USER_ADMIN_GROUP_VIEW";
i:11;s:35:"ROLE_SONATA_USER_ADMIN_GROUP_DELETE";
i:12;s:37:"ROLE_SONATA_USER_ADMIN_GROUP_OPERATOR";
i:13;s:35:"ROLE_SONATA_USER_ADMIN_GROUP_MASTER";
i:14;s:10:"ROLE_ADMIN";
}

Сначала вы можете подумать, что это должен быть сложный формат, который может быть декодирован только с помощью Doctrine, однако эта строка является обычным сериализованным массивом, созданным функция сериализации PHP. Думайте об этом как о другой нотации для представления информации, такой как JSON или XML.

Как декодировать (преобразовать в массив PHP)

Если вы работаете с доктриной и взаимодействуете с данными как сущностями, то обычно, если тип поля уже указан в доктрине, свойство getter сущности должно возвращать массив. Однако, если вы используете не Doctrine, а обычный PHP, вы можете преобразовать строку в массив используя функцию десериализации PHP. Функция PHP сериализует сериализацию структуры данных в строковое представление, уникальное для PHP:

$dc2array = serialize(array("HELLO", "YES"));
// Output: string(36) "a:2:{i:0;s:5:"HELLO";i:1;s:3:"YES";}"
var_dump($dc2array);

и может быть преобразован в объект PHP с помощью unserialize:

$dc2array = unserialize('a:15:{i:0;s:32:"ROLE_SONATA_USER_ADMIN_USER_EDIT";i:1;s:32:"ROLE_SONATA_USER_ADMIN_USER_LIST";i:2;s:34:"ROLE_SONATA_USER_ADMIN_USER_CREATE";i:3;s:32:"ROLE_SONATA_USER_ADMIN_USER_VIEW";i:4;s:34:"ROLE_SONATA_USER_ADMIN_USER_DELETE";i:5;s:36:"ROLE_SONATA_USER_ADMIN_USER_OPERATOR";i:6;s:34:"ROLE_SONATA_USER_ADMIN_USER_MASTER";i:7;s:33:"ROLE_SONATA_USER_ADMIN_GROUP_EDIT";i:8;s:33:"ROLE_SONATA_USER_ADMIN_GROUP_LIST";i:9;s:35:"ROLE_SONATA_USER_ADMIN_GROUP_CREATE";i:10;s:33:"ROLE_SONATA_USER_ADMIN_GROUP_VIEW";i:11;s:35:"ROLE_SONATA_USER_ADMIN_GROUP_DELETE";i:12;s:37:"ROLE_SONATA_USER_ADMIN_GROUP_OPERATOR";i:13;s:35:"ROLE_SONATA_USER_ADMIN_GROUP_MASTER";i:14;s:10:"ROLE_ADMIN";}');
var_dump($dc2array);

var_dump Метод выведет структуру массива, которая будет иметь следующий вид:

array(15) {
[0]=> string(32) "ROLE_SONATA_USER_ADMIN_USER_EDIT"
[1]=> string(32) "ROLE_SONATA_USER_ADMIN_USER_LIST"
[2]=> string(34) "ROLE_SONATA_USER_ADMIN_USER_CREATE"
[3]=> string(32) "ROLE_SONATA_USER_ADMIN_USER_VIEW"
[4]=> string(34) "ROLE_SONATA_USER_ADMIN_USER_DELETE"
[5]=> string(36) "ROLE_SONATA_USER_ADMIN_USER_OPERATOR"
[6]=> string(34) "ROLE_SONATA_USER_ADMIN_USER_MASTER"
[7]=> string(33) "ROLE_SONATA_USER_ADMIN_GROUP_EDIT"
[8]=> string(33) "ROLE_SONATA_USER_ADMIN_GROUP_LIST"
[9]=> string(35) "ROLE_SONATA_USER_ADMIN_GROUP_CREATE"
[10]=> string(33) "ROLE_SONATA_USER_ADMIN_GROUP_VIEW"
[11]=> string(35) "ROLE_SONATA_USER_ADMIN_GROUP_DELETE"
[12]=> string(37) "ROLE_SONATA_USER_ADMIN_GROUP_OPERATOR"
[13]=> string(35) "ROLE_SONATA_USER_ADMIN_GROUP_MASTER"
[14]=> string(10) "ROLE_ADMIN"
}
Ссылка на основную публикацию
Adblock
detector