Новая зависимая модель

Допустим есть 3 зависимые AR модели, при создании этих моделей, нужно сделать 3 экземпляра, и по отдельности их передать во вью. После сабмиа, в контроллере собрать их все в одну кучу. Что очень не удобно.

Для редактирования можно применить тот же giix с saveRelated(), но как быть с новой моделью?

Как вариант можно в родительской модели в init прописать добавление пустых связей, что тоже не очень удобно.

Подскажите красивое решение.

Спасибо

Вот к такому решению я пришел

Структура такова

Categories -< Products -< PropertiesValues

Также таблица Properties, на которую ссылаются Product и PropertiesValues

Product model:


public function init()

    {

        parent::init();

        if ($this->scenario == 'insert') {

            $category = Categories::model()->find('', array( 'order'=> 'name DESC'));

            $this->category_id = $category->id;


            //create new instances of property values

            $propertyValues = array();

            foreach($category->properties as $property) {

                $propertyValue = new PropertiesValues();

                $propertyValue->property_id = $property->id;

                //product_id is empty

                $propertyValues[] = $propertyValue;

            }

            $this->propertyValues = $propertyValues;

        }

    }

Save property_values:


 public function afterSave()

    {

        foreach($this->propertyValues as $propertyValue)

        {

            $propertyValue->product_id = $this->id;

            $propertyValue->save();

        }

    }

In the view


<table>

        <?php foreach($model->propertyValues as $propertyValue): ?>

        <tr>

            <td><?php echo CHtml::encode($propertyValue->property->name) ?></td>

            <td><?php echo $form->textField($propertyValue, 'value')?></td>

        </tr>

        <?php endforeach; ?>

    </table>

Во вью не получатеся получить значение релационной модели




echo CHtml::activeHiddenField($model, 'PropertyValue[' . $key . '][property_id]');



так как в CHtml::resolveValue() есть проверка на массив, а я хочу передать объект




if(is_array($value) && isset($value[$id]))

    $value=$value[$id];



Почему такое поведение?

Пришлось использовать отдельно дочернюю модель:




$propertyValueModel = current($model->propertyValue);

echo CHtml::activeHiddenField($propertyValueModel, '[' . $key . ']property_id');