Я хочу сохранить один из моих объектов сущности в сеансе, но при этом получаю следующие две ошибки:
Исключение: 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 я мог бы решить эту проблему, установив свойства protected вместо private. Единственная проблема, с которой я столкнулся, - это после чтения объекта из сеанса, о котором 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 воспринимал объекты сущностей, хранящиеся в сеансе, не сообщая об этом каждый раз.Есть идеи?