在表格

时间:2015-07-15 19:51:34

标签: symfony doctrine-orm translation

我已使用此article

设置了个人翻译表

我有一张桌子' AttrSchool'其中有一列名为' description'被翻译成三种语言en,ja,th。

和翻译文本存储在AttrSchoolTranslation

现在我制作了表格来编辑和更新“AttrSchool”#39;数据

public function editAttrSchoolAction(Request $request,$schoolId){

    $em = $this->getDoctrine()->getManager();
    $repository = $em->getRepository('UserBundle:AttrSchool');
    $attrSchool = $repository->findOneBy(array('id' => $schoolId));


    foreach ($attrSchool->getTranslations() as $trans){
        if($trans->getLocale() == 'ja'){
            $desc_ja = $trans->getContent();
        }
        if($trans->getLocale() == 'th'){
            $desc_th =  $trans->getContent();
        }
    }

    $form = $this->createFormBuilder($attrSchool)
    ->add('description','textarea',array('required'=> false,'attr' => array('rows' => '8','cols' => '60')))
    ->add('description_th','textarea',array('required'=> false,'data'=> $desc_th,'mapped' => false,'attr' => array('rows' => '8','cols' => '60')))
    ->add('description_ja','textarea',array('required'=> false,'data'=> $desc_ja,'mapped' => false,'attr' => array('rows' => '8','cols' => '60')))

    $form->handleRequest($request);

    if ($form->isValid()) {

        $attrSchool->setDescription($form->get('description_en')->getData());
        $attrSchool->addTranslation(new \Acme\UserBundle\Entity\AttrSchoolTranslation('ja','description',$form->get('description_ja')->getData()));
        $attrSchool->addTranslation(new \Acme\UserBundle\Entity\AttrSchoolTranslation('th','description',$form->get('description_th')->getData()));

然而它看起来很笨拙。 它会插入新的AttrSchoolTranslation列,而不是更新。 (那当然是因为我打过电话     new \ Acme \ UserBundle \ Entity \ AttrSchoolTranslation .....)

但我不知道如何更新转换表中的数据。

有人知道提示吗?

1 个答案:

答案 0 :(得分:0)

坚持多种翻译

  

通常,更加方便的是坚持更多翻译   创建或更新记录。可翻译允许通过   翻译库。将跟踪所有其他翻译   监听器,当执行刷新时,它将更新或   坚持所有其他翻译。

     

注意:这些翻译不会作为普通字段处理   你的对象,如果你翻译一个slug额外的翻译   不会知道如何生成slug,所以将值作为附加值   创建时应处理翻译。

多种翻译的示例:

<?php
// persisting multiple translations, assume default locale is EN
$repository = $em->getRepository('Gedmo\\Translatable\\Entity\\Translation');
// it works for ODM also
$article = new Article;
$article->setTitle('My article en');
$article->setContent('content en');

$repository->translate($article, 'title', 'de', 'my article de')
    ->translate($article, 'content', 'de', 'content de')
    ->translate($article, 'title', 'ru', 'my article ru')
    ->translate($article, 'content', 'ru', 'content ru')
;

$em->persist($article);
$em->flush();

// updating same article also having one new translation

$repo
    ->translate($article, 'title', 'lt', 'title lt')
    ->translate($article, 'content', 'lt', 'content lt')
    ->translate($article, 'title', 'ru', 'title ru change')
    ->translate($article, 'content', 'ru', 'content ru change')
    ->translate($article, 'title', 'en', 'title en (default locale) update')
    ->translate($article, 'content', 'en', 'content en (default locale) update')
;
$em->flush();

您是否曾尝试调用此translate的{​​{1}}方法?

$repository