2016-05-05 3 views
0

Я хочу создать несколько моделей в одной форме.Несколько моделей в одной модели Yii2

Это мой контроллер:

public function actionWorkRoom() { 
    $model = [new Moshtari()]; 
    $model[0] = new Moshtari(); 
    $model[1] = new Moshtari(); 
    if (Model::loadMultiple($model, Yii::$app->request->post()) && Model::validateMultiple($model)) { 
     foreach ($model as $m) { 
      $m->save(false); 
     }    
    } 
    return $this->render('_form_work_room', ['model' => $model]); 
} 

Модель:

class Moshtari extends \yii\db\ActiveRecord { 
     public function rules() { 
       return [ 
        [['CodeKargah'], 'number'], 
       ] 
     } 
     public function attributeLabels() { 
      return [ 
       'CodeKargah' => Yii::t('app', 'Code Kargah'), 
      ]; 
    } 

    } 

И это моя форма в виде:

foreach ($model as $index => $m) { 
    echo $form->field($m, "[$index]CodeKargah"); 
} 

но это бросает эту ошибку:

Call to a member function getActiveValidators() on a non-object

+0

Какова ваша полная ошибка и что строка кода упоминается? – topher

+0

полная ошибка http://www.dsabz.com/view/files/q.PNG – Farshid

+0

Есть ли правило для 'CodeKargah'? – topher

ответ

0

Я решил, что это новый код:

Контроллер:

public function actionWorkRoom($member = 1) { 
    $model[] = new Moshtari(['scenario' => 'work_room_kargah']); 
    for ($i = 0; $i < $member; $i++) { 
     $model[] = new Moshtari(['scenario' => 'work_room']); 
    } 
    if (Model::loadMultiple($model, Yii::$app->request->post()) && Model::validateMultiple($model)) { 
     foreach ($model as $m) { 
      $m->time = Yii::$app->jdate->date('Y/m/d') . ' ' . date('H:i:s'); 
      $m->CodeKargah = $model[0]->CodeKargah; 
      $m->save(false); 
     } 
     return $this->redirect('index'); 
    } 

    return $this->render('_form_work_room', ['models' => $model]); 
} 

Посмотреть

foreach ($models as $index => $model) { 
    //print_r($model->getErrors()); 
    if ($index >= 1) { 
        <?= 
        $form->field($model, "[$index]name", [ 
         'template' => '<div class="row nomargin"><div class="col-md-4 form_label">{label}</div><div class="col-md-7">{input}{error}</div></div>'] 
        )->textInput(['maxlength' => true]) 
        ?> 
    } 
} 
Смежные вопросы