作为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,
));
}
答案 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加载模型,然后更新记录。