【问题标题】:how to create models iteratively?如何迭代地创建模型?
【发布时间】:2013-12-26 10:32:34
【问题描述】:

作为 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 -->

但是如何在迭代中使用不同的模型名称填充我的数组,例如模型 1、模型 2、模型 3 等等? 谢谢 编辑:

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,
        ));
    }

【问题讨论】:

  • 每个学生都有单独的模型?
  • 是的,实际上我必须为 30 名学生的结果创建一个模型。不是硬编码而是可变的。然后我必须以形式使用这些模型
  • 每个学生存储在不同的表中?所以你有30张桌子。?这不是一个好习惯..
  • 不确定你的问题是否正确,但是如果你要为很多表自动生成模型类,有一个名为 giic 的扩展可以自动完成
  • @kumar,不,我不这样做,实际上我必须输入 30 个学生的结果,所以我需要输入 30 个记录(每个学生一个)。现在我要批量创建。

标签: php yii


【解决方案1】:

添加一个隐藏字段数组来保留 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 加载模型,然后更新记录。

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2013-09-03
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多