我是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();
}
我正在考虑使用表/列/数据创建一个对象/数组,如果一切正常,请在刷新之后调用全局函数将数据添加到更改表中。 这样做是否有简单的方法/良好做法?
答案 0 :(得分:1)
首先,你不需要自己实现这个逻辑之王。 Doctrine在内部跟踪实体插入,更新,字段更改和删除,并创建您可以侦听的相应事件。例如,当您创建新的parameters
实体并将其保留时,Doctrine会在您调用Info
操作时调度prePersist
事件。您可以创建事件订阅者来订阅此类事件并在那里执行您的逻辑。
要完全了解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它还支持版本控制。