2014-04-29 3 views
1

У меня некоторые проблемы с хранением 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 

I как-то исправить, но я думаю, что есть что-то лучше:

$item->setData(json_encode(serialize($myPhpObject))); 

Когда я использую это, вся сериализованная строка сохраняется, и я могу ее неэтериализировать правильно. У вас есть представление о том, что не так?

-edit-

это будет пример настройки из данных столбца:

data: 
    type: string 
    length: null 
    fixed: false 
    nullable: true 
    column: data 
+2

Просьба предоставить более подробную информацию об объекте, который вы сериализуете, потому что от вашего объекта зависит много решений. И, пожалуйста, есть большое руководство по адресу http://www.php.net/manual/en/function.serialize.php, и в комментариях вы можете найти много случаев. – pomaxa

+1

Пробовали ли вы использовать встроенный тип объекта 'object' Doctrine? – kix

+0

Вы deserialize после getData()? – Javad

ответ

2

Я предполагаю, что вы используете аннотацию в качестве доктрины конфигурации. Затем измените объект:

// src/Company/MyBundle/Entity/Frontend/table.php 
// ... 
/** 
* @var resource 
* 
* (non-PHPdoc) 
* @ORM\Column(name="data", type="object") 
*/ 
private $data; 
// ... 

затем внутри контроллера он не neccesery сериализации/десериализации объекта, доктрина будет обрабатывать этот

// 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); 
// ... 

удачи!

Смежные вопросы