我在使用doctrine存储php序列化对象时遇到了一些问题, 当我使用以下代码存储时:
$item = new \Company\MyBundle\Entity\Frontend\table();
$item->setData(serialize($myPhpObject));
$this->_em->persist($item);
$this->_em->flush();
然后在另一个例子中:
$item = $this->_em->getRepository('MyBundle:frontend\table')->findOneById(...);
echo $item->getData(); // display only a part of the serialized object
我发现某种方法是修复但我想有更好的事情要做:
$item->setData(json_encode(serialize($myPhpObject)));
当我使用它时,存储了所有序列化字符串,我可以正确地反序列化它。你知道什么是错的吗?
-edit -
这将是从列数据设置的一个示例:
data:
type: string
length: null
fixed: false
nullable: true
column: data
答案 0 :(得分:2)
我假设您使用注释作为doctrine配置。然后改变你的实体:
// src/Company/MyBundle/Entity/Frontend/table.php
// ...
/**
* @var resource
*
* (non-PHPdoc)
* @ORM\Column(name="data", type="object")
*/
private $data;
// ...
然后在控制器内部序列化/反序列化对象是没有必要的,doctrine会处理那个
// src/Company/MyBundle/Controller/SomeController.php
// ...
// write
$item = new \Company\MyBundle\Entity\Frontend\table();
$item->setData($myPhpObject);
$this->_em->persist($item);
$this->_em->flush();
// ...
// read
$item = $this->getDoctrine()->getRepository('CompanyMyBundle:table')->find($id);
$myPhpObject = $item->getData();
var_dump($myPhpObject);
// ...
祝你好运!
答案 1 :(得分:0)
使用Doctrine类型的ArrayType
(在实体注释中为array
)或ObjectType
(在实体注释中为object
)可能会存在一些潜在的安全问题(导致拒绝) (https://github.com/doctrine/dbal/issues/3289)
我本人将改为使用JsonObjectType。