并非任何数据库引擎(例如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"
}
编码愉快!
评论前必须登录!
注册