【问题标题】:retrieve from entity manager before ID is given在给出 ID 之前从实体管理器中检索
【发布时间】:2011-09-20 08:28:37
【问题描述】:

情况是这样的-

我需要在页面之间保留一个对象。在第一页上,我创建了对象,并为它创建了一个表单。在第二页上,我坚持这个对象。然后,用户可以选择返回并编辑他们的选择,或者完成并发布。

在用户编辑完对象之前,我不希望将我的更改刷新到数据库中。问题是对象在刷新到数据库之前不会获得唯一 ID。

有谁知道我如何检索持久但未刷新的对象?这甚至可能吗?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: php symfony persist entitymanager


    【解决方案1】:

    你序列化对象直到你完成它的所有属性。您可以将序列化对象保存在会话中以在页面之间保持不变。当您准备好更新或插入时,只需将其反序列化并将其放入数据库中。

    编辑:示例

    // page 1
    $object->setProperty($value);
    $_SESSION['object'] = serialize($object);
    
    // page 2
    $object = unserialize($_SESSION['object']);
    // use $object
    
    $_SESSION['object'] = serialize($object);
    
    
    // page N
    $object = unserialize($_SESSION['object']);
    $object->insertIntoDB();
    

    编辑 2 - 不要忘记在反序列化对象的所有页面中包含类定义,否则它将不起作用。

    【讨论】:

    • 甜蜜。我之前尝试过使用会话,但我错过了序列化部分。我试试看,谢谢建议。如果它有效,我会考虑这是我的答案。
    • mmm.. 该对象似乎无法通过 php 函数进行序列化。也许我缺少一个 symfony 函数...错误是 Item "couponname" for "O:33:"Frontend\UserBundle\Entity\Coupon":20:{s:5:"....调用 \serialize($coupon); 500 内部服务器错误 - Twig_Error_Runtime
    • 我想我明白了,使用使用 Symfony\Component\Serializer\Serializer;使用 Symfony\Component\Serializer\Encoder\JsonEncoder;使用 Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;和 $serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder())); $json = $serializer->serialize($coupon, 'json');
    • 但现在我找不到任何方法将其反序列化回优惠券对象^^
    • $coupon = $serializer->decode($json, 'json');给我一个数组而不是优惠券对象
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2018-09-06
    相关资源
    最近更新 更多