【发布时间】: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->request->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()))