在表单中添加多个模型记录表单-收集表格输入yii

在表单中添加多个模型记录表单-收集表格输入yii,yii,Yii,我有点迷路了。我正在关注这一点。我有一个产品表单,在产品表单中我有一个属性表单,比如颜色/大小。由于控制器中的循环,我在理解本教程时遇到困难。所以我得到它检查记录的数量并循环它,但是如果没有记录呢。好像教程说要创建一个新模型。当然可以。但是,如果没有记录并告诉它创建一个新记录,您怎么可能在视图中循环它呢。也许我没有正确理解这一点 我只是想添加3个记录,空白或填写。没有添加额外记录的js。试着先理解这一点 控制器: public function getProdAttr($id) {

我有点迷路了。我正在关注这一点。我有一个产品表单,在产品表单中我有一个属性表单,比如颜色/大小。由于控制器中的循环,我在理解本教程时遇到困难。所以我得到它检查记录的数量并循环它,但是如果没有记录呢。好像教程说要创建一个新模型。当然可以。但是,如果没有记录并告诉它创建一个新记录,您怎么可能在视图中循环它呢。也许我没有正确理解这一点

我只是想添加3个记录,空白或填写。没有添加额外记录的js。试着先理解这一点

控制器:

public function getProdAttr($id) {
        $items = array();
        if (isset($_POST['ProductAttribute']) ) {
            $items = ProductAttribute::model()->findAllByAttributes(array('product_id',$id));
            if($items!==null){
            foreach ($_POST['ProductAttribute'] as $item) {
                    $items[] = ProductAttribute::model()->findByPk($item['product_attribute_id']);
                }
            }
                else $items[] = new ProductAttribute();
        }
        return $items;
    }

public function actionUpdate($id)
{
    $model=$this->loadModel($id);

    $attributes=$this->getProdAttr($id);
    if(isset($_POST['ProductAttribute']))
    {
        $valid=true;
        foreach($attributes as $i=>$attribute)
        {
            if(isset($_POST['ProductAttribute'][$i]))
            $attribute->attributes=$_POST['ProductAttribute'][$i];
            $valid=$attribute->validate() && $valid;
            }
            if($valid)
                $attributes->save();
            }
    //stuff from product model
}
视图:

//产品模型表单的内容
名称描述价格
//这里丢了,如果没有记录呢?

您解决这个问题了吗?我找到了萨米人没有用这个。为了在表单中添加另一个模型,我在模型中使用了
aftersave()
方法并添加了另一个模型的信息。从表单中,我使用了
setState
,然后稍后检索它。
//stuff for product model form

<div class="form"> 
    <?php echo CHtml::beginForm(); ?>
    <table>
    <tr><th>Name</th><th>Description</th><th>Price</th></tr>
    <?php foreach($attributes as $i=>$attribute): ?> //lost here, what if there's no records?
    <tr>
    <td><?php echo CHtml::activeTextField($attribute,"[$i]name"); ?></td>
    <td><?php echo CHtml::activeTextArea($attribute,"[$i]description"); ?></td>
    <td><?php echo CHtml::activeTextField($attribute,"[$i]cost"); ?></td>
    </tr>
    <?php endforeach; ?>
    </table>
</div>