在Yii中从单个Controller插入两个不同表中的数据

时间:2013-12-16 10:43:22

标签: php arrays yii

我有两个不同的表,我想一次在两个表中插入数据。

一个表格是

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 create controller插入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,
    ));
}

希望你能清楚地理解它。

由于

2 个答案:

答案 0 :(得分:3)

要存储在两个表(Model)中,您必须为每个表创建两个模型对象。 例如:

  

$ v_model = new Verse; //用于保存功能

     

$ vt_model = new VerseTransctions; //用于保存功能

将这些模型对象传递给视图文件并使用如下。

对于经文模型文本框,您必须使用:

  

labelEx($ v_model,'verse_text');

对于verse_tarnsction模型文本框,您必须使用:

  

labelEx($ vt_model,'translation_text');

在行动中(保存/更新):

$ v_model-&gt; attributes = $ _POST [“Verse”];

  

如果($ v_model-&GT;保存())

     

{$ vt_model-&gt; attributes = $ _POST [“VerseTransctions”];

     

$ vt_model-&gt; verse_id = $ v_model-&gt; id; $ vt_model-&GT;保存();

     

}

答案 1 :(得分: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));

}

视图中创建.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>