Symfony2 сериализует объект сущности в сеанс

Я хочу сохранить один из моих объектов сущности в сеансе, но при этом я получаю две следующие ошибки:

Исключение: Symfony \ Bundle \ FrameworkBundle \ DataCollector \ RequestDataCollector :: serialize () должно возвращать строку или NULL

а также

ErrorException: Примечание: serialize (): «id» возвращается как переменная-член из __sleep (), но не существует в / var / www / clients / client71 / web256 / web / _dev_fd / kkupon / vendor / symfony / src / Symfony / Component /HttpKernel/DataCollector/DataCollector.php строка 29

Мой код выглядит так:

$offer = $this->getEntityManager()->getRepository('KkuponMainBundle:Offer')->find($offer_id);
$request->getSession()->set('offer', $offer);

Как я могу сделать это правильно?

Спасибо.

ОБНОВИТЬ С помощью Rowgm я мог бы решить эту проблему, установив свойства, защищенные вместо личных. Единственная проблема у меня послечтение сущность из сеанса, которую EntityManager не знает об этом, и если я добавлю объект (из сеанса) к другому объекту (между ними есть связь OneToMany), он не будет работать.

<?php
$offer = $this->get('session')->get('offer');
$coupon = new Coupon();
$coupon->setOffer($offer);
$this->em->persist($coupon);
$this->em->flush();

Это вызывает ошибку, потому что купон имеет свойство объекта, которого в соответствии с EntityManager нет в базе данных (на самом деле он находится в БД, я помещаю в сеанс из БД).

<?php
$offer = $this->get('session')->get('offer');
echo $this->em->getUnitOfWork()->isInIdentityMap($offer) ? "yes":"no"; //result: no

Одним из решений может быть:$offer = $this->em->merge($offer);

Но это не кажется лучшим. Я бы хотел, чтобы мой EntityManager воспринимал объекты сущностей, хранящиеся в сеансе, не сообщая об этом каждый раз. Любая идея?

Ответы на вопрос(3)

Ваш ответ на вопрос