【问题标题】:Yii2 Insert Multiple data of same model using one formYii2 使用一个表格插入多个相同模型的数据
【发布时间】:2019-01-08 21:12:51
【问题描述】:

我正在使用 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 在 var_dump($model) 中返回 NULL。我也试过用

(Model::loadMultiple($model, Yii::$app-&gt;request-&gt;post())) 但我得到错误

Call to a member function formName() on array

【问题讨论】:

  • 这个 $form->field($model, '[0]studentName')-> 意味着每个 $model[0] 都被声明为 $model[0] = new ClassC();在你的控制器中
  • 是的,这就是我想要的;从一种形式我插入多个时间模型:模型>学生名,模型->学生邮件,模型->学生代码。多次;对于第一个学生和第二个学生和第三个学生............
  • OK $model 中的每个数组都必须是模型 ClassC ex $model[0] = new ClassC() for 1st student $model[1] = new ClassC();第二个学生等等
  • 是的,这正是我想要做的,但我没有成功,它将是 $model[0] = new ClassC,并插入数据,$model[1] = new ClassC 和为第二个学生插入数据……但是我的代码不起作用
  • 对不起,我在你的代码中没有找到模型的声明。你必须在此之前创建它 if ($model->load(Yii::$app->request->post()))

标签: yii2 yii2-advanced-app


【解决方案1】:

试着把它放在你的 foreach 中:

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

并删除 $model;内循环

【讨论】:

  • 不工作仍然为空; id 是自动递增的
【解决方案2】:

这个例子可能对你有所帮助:

$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. 然后循环遍历所有实例并保存它们。

【讨论】:

  • 我收到错误:在 = $form->field($model, '[0]studentName')->textInput(['maxlength' 上的数组上调用成员函数 isAttributeRequired() => true])->label('NAME') ?>;我声明了 $model = [new ClassC] ....
  • 您需要为表单使用实例,从模型中尝试“return $this->render('createClass', ['model' => new ClassC(), ]);”
  • 您也可以查看这个小部件,它可能会有所帮助,github.com/wbraganca/yii2-dynamicform
  • 我试图从小部件中找到解决方案但没有帮助,
猜你喜欢
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多