Php Symfony3将每次更新保存到数据库中

Php Symfony3将每次更新保存到数据库中,php,postgresql,symfony,Php,Postgresql,Symfony,我是symfony和postgreSQL的新手,我正在尝试保存数据库更新/删除日志 我已经创建了这个表 CREATE TABLE "public"."changes" ( "id" INT NOT NULL , "id_user" INT NOT NULL, "operation" VARCHAR(45) NOT NULL, "table" VARCHAR(45) NOT NULL, "column" VARCHAR(45) NOT NULL, "old_data" T

我是symfony和postgreSQL的新手,我正在尝试保存数据库更新/删除日志 我已经创建了这个表

CREATE TABLE  "public"."changes" (
  "id" INT NOT NULL ,
  "id_user" INT NOT NULL,
  "operation" VARCHAR(45) NOT NULL,
  "table" VARCHAR(45) NOT NULL,
  "column" VARCHAR(45) NOT NULL,
  "old_data" TEXT NOT NULL,
  "new_data" TEXT NOT NULL,
  "ts" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY ("id"),
  CONSTRAINT "user"
    FOREIGN KEY ("id_user")
    REFERENCES "public"."users" ("id")
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);
我需要的是每次做我想做的事情时都保存到这个表中

/**
 * @Route("/insert", name="insert")
 */
public function insertAction(Request $request)
{
    $em = $this->get('doctrine')->getManager();

    $info = new Info();
    $info->setMail($request->request->get('mail'));
    $info->setName($request->request->get('name'));
    $info->setLastname($request->request->get('lastname'));

    $em->persist($info);

    $em->flush();

}
我正在考虑用表/列/数据创建一个对象/数组,如果一切正常,在刷新之后,调用一个全局函数将数据添加到变更表中。
有没有一个简单的方法/良好的实践可以做到这一点?

首先,您不需要自己实现这一逻辑之王。条令在内部跟踪实体插入、更新、字段更改和删除,并创建您可以侦听的相应事件。例如,当您创建新的
Info
实体并将其持久化时,当您调用
flush
操作时,条令将调度
prePersist
事件。您可以创建事件订阅者来订阅这些事件,并在那里执行您的逻辑

要完全理解条令生命周期事件,请查阅官方条令文档:

Symfony文档中描述的事件订阅服务器创建:


您还可以试用现有的第三方包,该包将记录实体插入、更新和删除:它还支持版本控制

你就不能在一个假想的听众面前做吗?怎么做?我在数据库中做了一个存储过程,但我也需要从代码中做这个,因为我需要保存正在进行更改的用户。我们使用Postgres’和功能完成了这一操作,所以日志由处理。抱歉,但不明白,你能给我举个例子吗?我已经添加了文档链接和一个例子。嗨,谢谢你的回答。我在实现这一点上遇到了很多问题。你能帮我一下吗?我创建了一个监听器,在那里我可以获得实体和实体管理器,但是如何使用它呢?嗨,瓦迪姆·阿什赫曼,谢谢你的回答。我以前没有回答你,因为我正在做大量的研究。但是我被卡住了。我所做的是一个suscriber姿势更新,例如,用户/角色表。但这是我的第一个问题。假设我想更改用户的角色,如何在我的更改表中保存旧角色和新角色?我怎么知道我用什么表格来表达,或者什么列已经改变了?嘿!在事件对象上的
preUpdate
事件调用
getEntityChangeSet
方法中,您将获得每个更改的字段。这里有一些关于
预更新
活动的文档再次感谢,看看这个:有了它,我可以获得新旧数据。但我在收集方面遇到了一些问题:例如,假设我需要更改用户角色,如何将该信息保存到数据库中。我对其他类型的信息没有问题,但是外键我卡住了。再次感谢