【问题标题】:Get old data in preUpdate Sonata Admin Bundle在 preUpdate Sonata Admin Bundle 中获取旧数据
【发布时间】:2013-04-12 07:57:06
【问题描述】:

我有一个 product 实体,它有一个 images 字段来存储产品中的图像名称,但图像名称取决于一个唯一的 part_number 字段,所以如果用户在零件号,他想编辑它,然后我还必须更改图像名称

我试过了,但它不起作用:

// class ProductsAdmin extends Admin

public function preUpdate($product) {

    $old_product = $this->getSubject();

    if ($old_product->getPartNumber() != $product->getPartNumber)
    {
         // change file names
    }

    $this->saveFile($product);
}

如何在 preUpdate() 函数中获取原始行?

【问题讨论】:

    标签: symfony-2.1 sonata-admin


    【解决方案1】:

    根据官方 SonataAdmin 谷歌论坛的主题: https://groups.google.com/forum/#!topic/sonata-devs/0zML6N13i3U 您需要使用 UnitOfWork 类: http://www.doctrine-project.org/api/orm/2.3/class-Doctrine.ORM.UnitOfWork.html

    这样做:

    public function preUpdate($object)
    {
        $em = $this->getModelManager()->getEntityManager($this->getClass());
        $original = $em->getUnitOfWork()->getOriginalDocumentData($object);
    }
    

    因此,您将获得数据库实体的一组值。 例如:要访问您的实体的值 password,请执行以下操作:

    $password = $original['password'];
    

    就是这样。 享受:)

    【讨论】:

    • 请记住,对于 mongoDB,您将使用 'getOriginalDocumentData' 作为 unitOfWork 的方法,但对于 mysql,您将需要使用 'getOriginalEntityData'。
    【解决方案2】:

    如果您只是在 preUpdate 函数中执行原则查询以从数据库中获取产品,您将拥有旧对象。然后进行比较,您就可以开始了。

    【讨论】:

    • 据我记忆,学说创建者不推荐使用 getUnitOfWork()。所以这个解决方案应该更好
    猜你喜欢
    • 2016-09-03
    • 2016-04-20
    • 2013-03-06
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2016-10-11
    • 2017-05-18
    • 2013-04-24
    相关资源
    最近更新 更多