2013-12-16 3 views
2

У меня есть две разные таблицы, и я хочу вставлять данные в оба из них за раз.Вставьте данные в две разные таблицы из одного контроллера в Yii

ONE таблица стихов

verse(id, topic_id, surah_id, verse_text) // id is primary key, 

Вторая таблица verse_translations

verse_translations(id, verse_id, language_id, translations_text) // id is primary key, language_id is foreign key references with language table, // verse_id is foreign key references with verse table. 

Verse Создать файл (_form.php)

<div class="form"> 
    <?php $form = $this->beginWidget('CActiveForm', array('id'=>'verse-form', 'enableAjaxValidation'=>true)); ?> 

    <p class="note">Fields with <span class="required">*</span> are required.</p> 

    <div class="row"> 
     <?php echo $form->labelEx($model, 'verse_text'); ?> 
     <?php echo $form->textArea($model, 'verse_text', array('rows'=>6, 'cols'=>50)); ?> 
     <?php echo $form->error($model,'verse_text'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model, 'verse_translations'); ?> 
     <p class="<?php echo "tran".$model->id ?>"> 

      <?php 
       $errors = array_filter($model->verseTranslations); 
       if(!empty($errors)) { 
        foreach($model->verseTranslations as $vt) { 
         echo $form->textArea($model, 'translation_text', array('value'=>$vt['translation_text'], 'rows'=>6, 'cols'=>50)); 
        } 
       } 
      ?> 

     </p>  
    </div> 

    <div class="row buttons"> 
     <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?> 
    </div> 

<?php $this->endWidget(); ?> 

</div><!-- form --> 

Как вы можете видеть из файла _form, я вызвал данные из таблицы verse_translations.

Теперь мои вопросы:

Как сохранить значение TEXTAREA, что он будет идти в массив в контроллере? И как я могу вставлять данные в таблицу verse_translation из контроллера создания стихов.

Вывод файла _form аналогичен этому.

Verse Создать контрольный код.

public function actionCreate() 
{ 
    $model=new Verse; 

    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 

    if(isset($_POST['Verse'])) 
    { 
     $model->attributes=$_POST['Verse']; 
     if($model->save()) 
      $this->redirect(array('view','id'=>$model->id)); 
    } 

    $this->render('create',array(
     'model'=>$model, 
    )); 
} 

Надеюсь, вы это четко поймете.

Благодаря

+1

Можете ли вы опубликовать свой код контроллера? –

+0

PLS опубликовать код вашего действия – dev1234

ответ

3

Я думаю, вы должны попробовать это

public function actionCreate() 
    { 
    $verse_model=new Verse; 
    $verse_translation_model=new Verse_translations; 
    if(isset($_POST['Verse']) && isset($_POST['Verse_translations'])) 
    { 
    $verse_model->attributes=$_POST['Verse']; 
    $verse_translation_model->attributes=$_POST['Verse_translations']; 
    $verse_model->save(); 
    $verse_translation_model->save(); 
    echo 'data is saved in both tables'; 
    } 
    $this->render('create',array('verse_model'=>$verse_model,'verse_translation_model'=>$verse_translation_model)); 

} 

В просмотров в create.php

$this->renderPartial('_form',array('verse_model'=>$verse_model,'verse_translation_model'=>$verse_translation_model)); 

в _form.php

<?php $form = $this->beginWidget('CActiveForm', array('id'=>'verse-form', 'enableAjaxValidation'=>true)); ?> 

    <p class="note">Fields with <span class="required">*</span> are required.</p> 

    <div class="row"> 
     <?php echo $form->labelEx($verse_model, 'verse_text'); ?> 
     <?php echo $form->textArea($verse_model, 'verse_text', array('rows'=>6, 'cols'=>50)); ?> 
     <?php echo $form->error($verse_model,'verse_text'); ?> 
    </div> 
<div class="row"> 
     <?php echo $form->labelEx($verse_model, 'topic_id'); ?> 
     <?php echo $form->textArea($verse_model, 'topic_id', array('rows'=>6, 'cols'=>50)); ?> 
     <?php echo $form->error($verse_model,'topic_id'); ?> 
    </div> 
<div class="row"> 
     <?php echo $form->labelEx($verse_model, 'surah_id'); ?> 
     <?php echo $form->textArea($verse_model, 'surah_id', array('rows'=>6, 'cols'=>50)); ?> 
     <?php echo $form->error($verse_model,'surah_id'); ?> 
    </div> 

<div class="row"> 
     <?php echo $form->labelEx($verse_transaction_model, 'verse_id'); ?> 
     <?php echo $form->textArea($verse_transaction_model, 'verse_id', array('rows'=>6, 'cols'=>50)); ?> 
     <?php echo $form->error($verse_transaction_model,'verse_id'); ?> 
    </div> 

<div class="row"> 
     <?php echo $form->labelEx($verse_transaction_model, 'translations_text'); ?> 
     <?php echo $form->textArea($verse_transaction_model, 'translations_text', array('rows'=>6, 'cols'=>50)); ?> 
     <?php echo $form->error($verse_transaction_model,'translations_text'); ?> 
    </div> 

<div class="row"> 
     <?php echo $form->labelEx($verse_transaction_model, 'language_id'); ?> 
     <?php echo $form->textArea($verse_transaction_model, 'language_id', array('rows'=>6, 'cols'=>50)); ?> 
     <?php echo $form->error($verse_transaction_model,'language_id'); ?> 
    </div> 
+1

спасибо, что помогли мне ... –

3

Хранить в двух таблицах (модель), вы должны создать две модели объекта для каждого. для ex:

$ v_model = новый стих; // Функция сохранения

$ vt_model = new VerseTransctions; // Для сохранения функции

Передайте этот объект модели для просмотра файла и используйте его, как показано ниже.

Для куплет модели текстовых полей, вы должны использовать:

labelEx ($ v_model, 'verse_text');

Для verse_tarnsction модели текстовых полей, вы должны использовать:

labelEx ($ vt_model, 'translation_text');

В действии (сохранить/обновить):

$ v_model-> атрибуты = $ _POST [ "Стих"];

если ($ v_model-> сохранить())

{$ vt_model-> атрибуты = $ _POST [ "VerseTransctions"];

$ vt_model-> verse_id = $ v_model-> id; $ Vt_model-> Save();

}

+0

спасибо, что помогли мне ... –

Смежные вопросы