I tried to do the same thing before. I had to find out that it is impossible to use these two things together, you must realize this for yourself.
I did it like this: Text.php
use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; class Text { private $id; private $class; private $field; private $key_id; private $lang; private $text; ...getter setter... }
Language.php
use Doctrine\ORM\Mapping as ORM; class Language { private $id; private $language; ... getter setter ....
Now I wrote a service to manage these: TextManager.php
public function setupText($object, $field, $langKey){ $lang = $this->langRepo->findOneBy(array("language" => $langKey)); $txt = $this->textRepo->findOneBy(array( 'class' => get_class($object), 'field' => $field, 'lang' => $lang, 'key_id' => $object->getId() )); if($txt != null){ return $txt; } $txt = new Text(); $txt->setClass(get_class($object)); $txt->setField($field); $txt->setKeyId($object->getId()); $txt->setLang($lang); return $txt; } public function getText($object, $field, $langKey){ $lang = $this->langRepo->findOneBy(array("language" => $langKey)); $txt = $this->textRepo->findOneBy(array( 'class' => get_class($object), 'field' => $field, 'lang' => $lang, 'key_id' => $object->getId() )); if ($txt == null){ return false; } return $txt; }
In your controller, you can now do this: to get a text object in the ohter version
$logRepo = $em->getRepository('Gedmo\Loggable\Entity\LogEntry'); // we use default log entry class $text = $textManager->setupText($object, 'abouttext', 'de'); $logRepo->revert($text, 1); //1 is the version you would like to have $text->getText(); //version 1 text
to create a new text object
$text = $textManager->setupText($object, 'otherfield', 'fr'); $text->setText("your super text"); $em->persist($text); $em->flush();
Hope this helps you, and if you have any questions, don't ask questions.