2016-05-23 84 views
2

我有一個小問題,我無法解決它。 我有一個控制器,它使用AJAX接受4個變量,我需要在第一個表中插入數據,然後從第一個表中獲取ID值,並使用2個附加參數將其插入到2。 所以,我的應用程序的結構是:在Doctrine/Symfony 3中創建類似SQL觸發器的東西

1)關鍵字表格與字段keywordId,KeywordVal和頁面ID(從AJAX getted)與領域

2)翻譯表keywordID(從Keywords.keywordId獲得),和的langCode翻譯(AJAX)

3)從ajax獲取數據的控制器,進行它並插入到表中。

所以,我的問題是下一步:我如何配置我的EventListener?這個監聽器必須在flush()方法和insret數據之後運行到Translations表中。

回答

1

爲什麼不在控制器中創建它,因爲要在EventListener中完成所有操作,必須以某種方式將值傳遞給偵聽器。

如果你在你的控制器喲可以先堅持在第一實體所需的參數和做堅持以取消previusly創建的實體相關的第二實體之後。

喜歡的東西:

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

我覺得這麼多容易做

+0

野趣的解決方案,會嘗試,如果不會有聽衆成功:) TNX –

1

你似乎需要的是一個主義監聽器。這裏是 documentation來創建一個Doctrine監聽器。我認爲你可能想使用preFlush事件。請小心,每次刷新都會觸發此事件,而不僅僅是關鍵字,因此您必須在創建翻譯之前首先檢查它是否爲關鍵字。

編輯:沒關係,只是注意到這並不能回答你的問題。不過,我覺得你的模型可以改進,因爲你不需要多次刷新來插入一組數據。從理論上講,你應該有關鍵字和翻譯之間的一對多關係,並就學說單獨管理兩個實體在插入自己的ID鏈接。

相關問題