【发布时间】:2014-08-23 09:54:35
【问题描述】:
我正在重构一个项目,并决定使用 Symfony2 作为我的框架。我正在使用与以前相同的数据库架构,但我在使用 DataFixtures 和 Doctrine2 创建一些测试数据时遇到了困难。
有问题的数据库字段将包含一个加密的电子邮件字段,该字段被存储为 VARBINARY 并定义为:
/**
* @ORM\Column(type="string", columnDefinition="VARBINARY(254) NOT NULL")
*/
protected $email;
注意 - 我知道这不是可移植的,但二进制字段在稳定的 DBAL 版本中尚不可用。
在我正在做的数据夹具中:
$user1 = new User();
$user1->setName('Joe Bloggs');
$user1->setEmail('test@test.com');
...
$manager->persist($user1);
...
$manager->flush();
这是可以理解的产生以下错误(我已经替换了类路径等以提高可读性):
[Symfony\Component\Debug\Exception\ContextErrorException]
可捕获的致命错误:传递给 {MyClass}::setEmail() 的参数 1 必须 是二进制的实例,给定字符串
我尝试加密字符串(使用与之前相同的过程),但仍然只是返回一个字符串:
$encEmail=\mcrypt_encrypt(MCRYPT_RIJNDAEL_128, ENCKEY, 'test@test.com', MCRYPT_MODE_ECB);
$user1->setEmail($encEmail);
我尝试将输出打包成二进制字符串,也尝试将其转换为二进制字符串,但都没有成功。
我知道我可以手动将测试数据直接创建到数据库中,但为了学习,我想获得数据夹具工作。
谢谢。
【问题讨论】:
-
Doctrine 2.1 允许使用字段类型 blob,如 here 所述。
-
谢谢 - 但我知道 DBAL 2.4.4 中提供了二进制字段,希望将来会包含在 Symfony2/Doctrin2 中。我知道我们暂时将使用 MySQL,可移植性并不是真正的问题,只要二进制字段得到原生支持,我就可以更改我的实体,所以我不明确定义二进制字段。
标签: php symfony doctrine-orm binary