gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:19:01 25 4
gpt4 key购买 nike

我是 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();

}

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

最佳答案

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

要完全了解 Doctrine 生命周期事件,请查看官方 Doctrine 文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html

Symfony 文档中描述的事件订阅者创建:http://symfony.com/doc/current/doctrine/event_listeners_subscribers.html#creating-the-subscriber-class

您还可以试用现有的第三方包,记录实体的插入、更新和删除:https://github.com/simplethings/EntityAuditBundle它还支持版本控制。

关于php - Symfony3 将每次更新保存到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44974520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com