我想知道是否有办法在数据库的新行中保存一组文本字段,每个文本字段中的第一个框的值也将随之保存.
这是表格:

当用户点击保存时,它应该保存在数据库中:

我的表结构是

3.1 - 在我的addNew.php(来自类文件(我知道我不遵循命名约定,我的不好)在构造函数中,我从我的控制器(addNewAction())获得语言列表.
我遍历语言数组并生成语言翻译的文本字段.
3.2-当用户点击保存时,我遍历文本字段并检查语言键文本字段并将其值保存在变量中,并在每次循环翻译文本字段时使用该变量
4.1 - addNewAction
public function addNewAction()
{
// to add new key and translation associated with it
// an array of optnions which cotains list of languages
$options = $this->getAllLanguages();
$form = $this->createForm(new AddNew($options));
$form->bind($this->getRequest());
if ($form->isValid()) {
foreach($form->getData() as $key => $value){
$oTranslation = new Translations();
if($key == 'languageKey'){
$languageKey = $value;
continue;
}
$locale = $key;
$translation = $value;
$language = $this->getDoctrine()
->getRepository('CodeizSDBTranslatorBundle:Languages');
$query = $language->createQueryBuilder('l')
->select('l.id')
->where('l.locale = :locale')
->setParameter('locale' , $locale)
->getQuery();
$id = $query->getResult();
$oTranslation->setLanguageId($id[0]['id']);
$oTranslation->setLanguageKey($languageKey);
$oTranslation->setTranslation($translation);
$em = $this->getDoctrine()->getManager();
$em->persist($oTranslation);
$em->flush();
}
return $this->redirect($this->generateUrl('codeiz_sdb_translator_addlanguagekey'));
}
return $this->render('CodeizSDBTranslatorBundle:Default:addNewKey.html.twig', array(
'form' => $form->createView(),
));
}
Run Code Online (Sandbox Code Playgroud)
4.2 - addNew.php(来自班级)
<?php
namespace Codeiz\SDBTranslatorBundle\Form\Add;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class AddNew extends AbstractType
{
private $languages;
public function __construct($languages){
$this->languages = $languages;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('languageKey');
foreach ($this->languages as $key => $value) {
$builder->add($value['locale'] , 'text' , array('label'=>$value['description']) );
}
}
public function getName()
{
return 'addnew';
}
}
Run Code Online (Sandbox Code Playgroud)
4.3 - 这是我传递给表单以生成文本字段的数组,存储在其中 $this->languages,看起来像
Array
(
[0] => Array
(
[id] => 1
[locale] => en_US
[description] => English - United States
)
[1] => Array
(
[id] => 2
[locale] => fr_FR
[description] => Frenish
)
)
Run Code Online (Sandbox Code Playgroud)
这些是我以为我可能会做的事情:
5.1-使用我的代码BLAH.
5.2-重组数据库,每个语言都是一列.
我尝试了很多对我来说不起作用的东西,而我现在这样做的方式让它看起来不成熟.
除此之外,我还在学习,我真的想在没有重组数据库的情况下解决这个问题.
请避免讨论性能,将注意力集中在问题上...并且请更改标题,因为我确定这不是描述问题的正确方法..或者甚至更好地建议一个..如果你恶搞一些不正确的技术术语请编辑他们..谢谢:)
| 归档时间: |
|
| 查看次数: |
503 次 |
| 最近记录: |