Yii2 Вставить несколько данных одной модели, используя одну форму - PullRequest
0 голосов
/ 07 января 2019

Я использую Yii2 и пытаюсь вставить несколько данных одной модели, используя в одной форме, это похоже на систему счетов-фактур, вставляющую несколько продуктов по одной форме.

моя точка зрения:

<?php $form = ActiveForm::begin(); ?>

    <?= $form->field($model, '[0]studentName')->textInput(['maxlength' => true])->label('NAME') ?>

    <?= $form->field($model, '[0]studentEmail')->textInput(['maxlength' => true])->label('EMAIL') ?>

    <?= $form->field($model, '[0]studentCode')->textInput(['maxlength' => true])->label('CODE') ?>

    <!--  -->

    <?= $form->field($model, '[1]studentName')->textInput(['maxlength' => true])->label('NAME') ?>

    <?= $form->field($model, '[1]studentEmail')->textInput(['maxlength' => true])->label('EMAIL') ?>

    <?= $form->field($model, '[1]studentCode')->textInput(['maxlength' => true])->label('CODE') ?>

    <!--  -->

    <?= $form->field($model, '[2]studentName')->textInput(['maxlength' => true])->label('NAME') ?>

    <?= $form->field($model, '[2]studentEmail')->textInput(['maxlength' => true])->label('EMAIL') ?>

    <?= $form->field($model, '[2]studentCode')->textInput(['maxlength' => true])->label('CODE') ?>

    ....    

    <?= $form->field($model, 'note')->textInput(['maxlength' => true])->label('NOTE') ?>

    <div class="form-group">
        <?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
    </div>

<?php ActiveForm::end(); ?>

и действие создания моего контроллера:

public function actionCreateClass($ssid)
    {
        $program = new Program();  $model = new ClassC();  $session = $this->findSession($ssid)

        if ($model->load(Yii::$app->request->post())) 
        {
            $program->title = 'PHP'. date('Y') .$session->title;
            $program->note = $model->note;
            $program->save();

            foreach ($model->studentCode as $SC)
            {
                $student = $this->findStudent($SC);

                $model;
                $model->program = $program->program_id;
                $model->save();
            }

            return $this->redirect(['programe', 'id' => $program->program_id]);
        }

        return $this->render('createClass', [
            'model' => $model,
        ]);

Я пытался использовать var_dump, чтобы узнать, что я получаю в качестве возврата, но мой var_dump возвращает NULL в var_dump($model). Я также пытался использовать

(Model::loadMultiple($model, Yii::$app->request->post())) но я получаю ошибку

Call to a member function formName() on array

Ответы [ 2 ]

0 голосов
/ 08 января 2019

этот пример может вам помочь:

$modelsAddress = [new Address];
$modelsAddress = Model::createMultiple(Address::classname());
Model::loadMultiple($modelsAddress, Yii::$app->request->post());
foreach ($modelsAddress as $modelAddress) {
   $modelAddress->customer_id = $modelCustomer->id;
   $modelAddress->save();
}
  1. вы создаете несколько экземпляров нужного класса модели, используя createMultiple.
  2. затем вы загружаете данные из формы, используя loadMultiple.
  3. затем вы перебираете все экземпляры и сохраняете их.
0 голосов
/ 07 января 2019

Попробуйте поместить это в ваш foreach:

$model->id = NULL; //primary key(auto increment id) id
$model->isNewRecord = true;
$model->program = $program->program_id;
$model->save();

И удалить $ модель; внутренний цикл

...