2013-07-12 2 views
1

В файле _form.php У меня есть текстовые поля из двух разных моделей, я внес изменения в контроллер create, чтобы вставить записи для обеих моделей, но проблема в контроллере update, как я могу загрузить данные второй модели в текстовых окнах второй модели?
будут заполнены только текстовые поля, относящиеся к первой модели.Как загрузить несколько моделей в контроллере обновлений

+0

И что вы пытаетесь сделать, решить эту проблему? Пожалуйста, покажите свой код. И может быть это поможет: http://www.yiiframework.com/wiki/291/update-two-models-with-one-view/ – Sergey

ответ

1

Просто визуализируйте обе модели на update в своем контроллере.

$this->render('update', array(
    'model1' => $model1, 
    'model2' => $model2, 
)); 

и в вашем _form.php вызова в этом, как полей ввода

<?php echo $form->labelEx($model1, ‘data1’); ?> 
<?php echo $form->textField($model1, ‘data1’, array(‘size’ => 60, ‘maxlength’ => 250)); ?> 

<?php echo $form->labelEx($model2, ‘data2’); ?> 
<?php echo $form->textField($model2, ‘data2’, array(‘size’ => 60, ‘maxlength’ => 250)); ?> 

надеюсь, что это помогает.

EDIT

Так как вы могли бы быть на той же странице _form.php для create зрения необходимо создать еще один файл _form.php, скажем _formUpdate.php [копия _form.php] страницы и от вашего update.php вызова делают _formUpdate.php, а затем _form.php и сделанные выше изменения

+0

Я попытался использовать то, что было предложено выше, но данные не заполнены адрес текстовое поле –

+0

сейчас он работает спасибо –

+0

приятно это знать. :) любезно отметим это как ответ, если он действительно работает, спасибо – zzlalani

0

_form

<div class="form"> 

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

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

    <?php echo $form->errorSummary($model); ?> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'name'); ?> 
     <?php echo $form->textField($model,'name',array('size'=>44,'maxlength'=>44)); ?> 
     <?php echo $form->error($model,'name'); ?> 
    </div> 
    <div class="row"> 
     <?php echo $form->labelEx(Table2::model(),'address'); ?> 
     <?php echo $form->textField(Table2::model(),'address',array('size'=>44,'maxlength'=>44)); ?> 
     <?php echo $form->error(Table2::model(),'address'); ?> 
    </div> 

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

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

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

update.php

<?php 
$this->breadcrumbs=array(
    'Tabel1s'=>array('index'), 
    $model->name=>array('view','id'=>$model->id), 
    'Update', 
); 

$this->menu=array(
    array('label'=>'List Tabel1', 'url'=>array('index')), 
    array('label'=>'Create Tabel1', 'url'=>array('create')), 
    array('label'=>'View Tabel1', 'url'=>array('view', 'id'=>$model->id)), 
    array('label'=>'Manage Tabel1', 'url'=>array('admin')), 
); 
?> 

<h1>Update Tabel1 <?php echo $model->id; ?></h1> 

<?php echo $this->renderPartial('_formUpdate', array('model'=>$model,'model2'=>$model2)); ?> 

Tabel1Controller.php

public function actionCreate() 
    { 
     $model=new Tabel1; 
    $model2=new Table2; 
     // Uncomment the following line if AJAX validation is needed 
     // $this->performAjaxValidation($model); 

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

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

    /** 
    * Updates a particular model. 
    * If update is successful, the browser will be redirected to the 'view' page. 
    * @param integer $id the ID of the model to be updated 
    */ 
    public function actionUpdate($id) 
    { 
     $model=$this->loadModel($id); 
    $model2=$this->loadModel2($id); 
     // Uncomment the following line if AJAX validation is needed 
     // $this->performAjaxValidation($model); 
//echo $model2->address; 
     if(isset($_POST['Tabel1'])&&isset($_POST['Table2'])) 
     { 
      $model->attributes=$_POST['Tabel1']; 
         $model2->attributes=$_POST['Table2']; 
      if($model->save()&&$model2->save()) 
       $this->redirect(array('view','id'=>$model->id)); 
     } 

     $this->render('update',array(
      'model'=>$model, 
        'model2'=>$model2 
     )); 
    } 
public function loadModel2($id) 
    { 
     $model=Table2::model()->findByPk(1); 
     if($model===null) 
      throw new CHttpException(404,'The requested page does not exist.'); 
     return $model; 
    } 
+0

Я попытался использовать то, что предложил zzlalani, но данные не заполнены в текстовом поле –

+0

Пожалуйста, проверьте мой комментарий – zzlalani

+1

Я имею в виду проверить мои изменения в вашем ответе. – zzlalani

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