如何迭代地创建模型?

时间:2013-12-26 10:32:34

标签: php yii

作为Yii的初学者我有一个问题,我想在迭代中创建模型。例如,我想为30名学生创建结果模型。如何在迭代中创建这些模型?我不能硬编码,因为学生的数量可能因班级而异。 在这种方法中,我需要使用表格输入,但为此目的,我需要将每个模型的属性绑定到某个元素,如

textArea

yii的权威指南提供了此代码

<div class="form">
<?php echo CHtml::beginForm(); ?>
<table>
<tr><th>Name</th><th>Price</th><th>Count</th><th>Description</th></tr>
<?php foreach($items as $i=>$item): ?>
<tr>
<td><?php echo CHtml::activeTextField($item,"[$i]name"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]price"); ?></td>
<td><?php echo CHtml::activeTextField($item,"[$i]count"); ?></td>
<td><?php echo CHtml::activeTextArea($item,"[$i]description"); ?></td>
</tr>
<?php endforeach; ?>
</table>

<?php echo CHtml::submitButton('Save'); ?>
<?php echo CHtml::endForm(); ?>
</div><!-- form -->

但是如何在迭代中使用不同的模型名称(如model1,model2,model3等)填充数组? 谢谢 编辑:

public function actionCreate($exam=1,$class=1,$subject=4,$max=5,$min=4)
    {
                $students=  Student::model()->findAllByAttributes(array('class_grade_id'=>$class));
                //CVarDumper::Dump($students,100,true);
               // die();
                $i=0;
                $data=array();
        $model=new SubjectResult;
                foreach($students as $key)
                    {
                    $data[$i]=new SubjectResult();
                    $i++;
                    }
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['SubjectResult']))
        {

            $model->attributes=$_POST['SubjectResult'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->id));
        }

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

1 个答案:

答案 0 :(得分:0)

添加隐藏字段数组以保留ID。

<?php foreach($items as $i=>$item): ?>
    <tr>
    <td><?php echo CHtml::activeTextField($item,"[$i]name"); ?>
    <?php echo CHtml::hiddenField('stud_ids[]' , $i);?>
    </td>
    <td><?php echo CHtml::activeTextField($item,"[$i]price"); ?></td>
    <td><?php echo CHtml::activeTextField($item,"[$i]count"); ?></td>
    <td><?php echo CHtml::activeTextArea($item,"[$i]description"); ?></td>
    </tr>
    <?php endforeach; ?>

在您的更新操作中,

$ids = $_POST["stud_ids"]

将此$ids传递给foreach以获取每个ID并使用id加载模型,然后更新记录。