在 Doctrine / Symfony 3 中创建类似 SQL 触发器的东西



我有一个小问题,我无法解决。我有一个控制器,它使用 AJAX 接受 4 个变量,我需要在第一个表中插入数据,然后从第一个表中获取 ID 值并将其插入 2 个附加参数。所以,我的应用结构是:

1) 关键字

表,包含字段关键字 ID、关键字瓦尔和页面 ID(从 AJAX 获取)

2)带有字段关键字ID的翻译表(从Keywords.keywordId获取),langCode和翻译(AJAX)

3)从ajax获取数据的控制器,继续并插入到表中。

所以,我的问题是下一个:如何配置我的事件侦听器?此侦听器必须在 flush() 方法之后运行,并将数据输入到翻译表中。

为什么不在控制器中创建所有内容,因为要在 EventListener 中执行所有操作,您必须以某种方式将值传递给侦听器。

如果您在控制器中执行此操作,则可以首先使用所需参数保留第一个实体,然后在持久化与之前创建的实体相关的第二个实体。

像这样:

$em = $this->getDoctrine()->getManager();
$keyword = new Keyword($param1, $param2);
$em->persist($keyword);
$keywordTranslation = new KeywordTranslation($keyword, $param3, $param4);
$em->persist($keywordTranslation);
$em->flush();

我认为这很容易做到

你似乎需要一个教义倾听者。以下是创建教义侦听器的文档。在我看来,您可能希望使用 preFlush 事件。请注意,此事件在每次刷新时都会触发,而不仅仅是关键字,因此在创建翻译之前,您必须先检查它是否为关键字。

编辑:没关系,只是注意到这并不能回答你的问题。但是,我觉得您的模型可以改进,因为您不必多次刷新以插入一组数据。从理论上讲,关键字和翻译之间应该有一个一对多的关系,而Doctrine将单独管理在插入时将两个实体与其ID联系起来。

相关内容

  • 没有找到相关文章