如何反序列化使用Doctrine存储在数据库中的DC2Type数组数据类型

并非任何数据库引擎(例如MySQL)都知道PHP序列化是什么, 因此你不能在此级别上执行此操作, 这意味着你需要使用PHP进行” 是” 或” 是” 操作。准则中的DC2Type字段存储为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数组)如果你正在使用原则, 并且正在作为实体与数据进行交互, 那么通常如果在Doctrine中已经指定了字段类型, 则实体的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对象:
$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" }

【如何反序列化使用Doctrine存储在数据库中的DC2Type数组数据类型】编码愉快!

    推荐阅读