12

我有一个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() 函数中获取原始行?

4

2 回答 2

22

根据从官方 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 = $original['password'];

就这样。享受 :)

于 2014-01-19T22:15:05.993 回答
0

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

于 2013-04-22T13:44:40.500 回答