并非任何数据库引擎(例如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数组数据类型】编码愉快!
推荐阅读
- 如何在自己的插件之前在Shopware中注册第三方插件的自定义模型
- 如何在Symfony 3中生成通用唯一标识符(UUID)
- 如何在基于CLI的基于Unix的操作系统中使用TAR压缩整个目录(包括子目录)
- 通过USB连接到Xamarin.Android应用程序与网站进行通信
- Xamine Android WindowSoftInput Resize(特定页面)
- Xamarin Android(此应用程序使用不正确的配置构建)
- RegisterNavigationServiceAppStart期间的MvxIoCResolveException
- Xamarin.Forms Android改变Button Image的颜色
- Android ActionBar错误的布局方向