我想将一个实体对象保存到会话中,但正如我所做的那样,我得到以下两个错误:
原文链接:https://www.f2er.com/php/130899.htmlException:
Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector::serialize()
must return a string or NULL
和
ErrorException: Notice: serialize(): “id” returned as member
variable from __sleep() but does not exist in
/var/www/clients/client71/web256/web/_dev_fd/kkupon/vendor/symfony/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.PHP
line 29
我的代码如下:
$offer = $this->getEntityManager()->getRepository('KkuponMainBundle:Offer')->find($offer_id); $request->getSession()->set('offer',$offer);
我该如何得到它正确?
谢谢.
UPDATE
通过Rowgm的帮助,我可以通过设置属性而不是私有来解决这个问题.唯一的问题是从EntityManager不知道的会话中读取实体后,如果我将对象(从会话)添加到另一个对象(它们之间有OneToMany关系),它将不起作用.
<?PHP $offer = $this->get('session')->get('offer'); $coupon = new Coupon(); $coupon->setOffer($offer); $this->em->persist($coupon); $this->em->flush();
这引发了一个错误,因为优惠券有一个对象属性,根据EntityManager不在数据库中(实际上是在DB中,我将数据库放在会话中).
<?PHP $offer = $this->get('session')->get('offer'); echo $this->em->getUnitOfWork()->isInIdentityMap($offer) ? "yes":"no"; //result: no
一个解决方案可以是:
$offer = $this-> em-> merge($offer);
但这似乎不是最好的一个.我希望我的EntityManager能够感知存储在会话中的实体对象,而不是每次都通知它.
任何想法?