Inserção De Dados (Relacionamento 1 Para N)

Tenho uma tabela pai chamada solicitação e uma tabela filha contendo os ítens da solicitação.

No momento eu uso um formulário para cadastrar uma solicitação. Em seguida faço o cadastro dos ítens da solicitação.

No entanto quero preencher um único formulário onde eu informaria os dados da solicitação e os ítens da mesma.

A idéia que tive foi de criar os campos dos ítens com javascript e registrar estes ítens em sessão através do ajax ou usar campos input hidden para armazenar os valores antes de efetuar o cadastro.

Mas achei tudo isso meio gambiarra.

Então queria saber se o Yii tem alguma extensão para facilitar este cadastro.

Você pode usar as seguintes extensões.

Abaixo um exemplo de senário.

Exemplo modelos:





<?php

class Situacao extends CActiveRecord

{

    /**

 	* @property integer id

 	* @property string nome

 	*/


 	...

    public function relations()

    {

        return array(

            'itensSituacao' => array(self::HAS_MANY, 'ItemSituacao', 'situacao_id'),

        );

    }

    ...

}




<?php

class ItemSituacao extends CActiveRecord

{

    /**

 	* @property integer id

 	* @property string descricao

 	*/

 	...

 	public function relations()

    {

        return array(

            'situacao' => array(self::BELONGS_TO, 'Situacao', 'situacao_id'),

        );

    }

    ...

}

Agora no seu Controller:





<?php

class SituacaoController extends Controller

{


    ...

    public function actionCreate()

    {

        $modelSituacao = new Situacao;

        $modelItemSituacao = new ItemSituacao;


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


            $modelSituacao ->attributes=$_POST['Situacao'];


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

                $modelSituacao ->itensSituacao = $this->criaModelos('ItemSituacao', $_POST['ItemSituacao']);

                if ($modelSituacao->withRelated->save(true, array('itensSituacao'))){

                    $this->redirect(array('view','id'=>$modelSituacao->id));

                }

            }

            elseif($modelSituacao->save()){

                $this->redirect(array('view','id'=>$modelSituacao->id));

            }

        }


        $this->render('create',array(

            'modelSituacao'=>$modelSituacao,

            'modelItemSituacao'=>$modelItemSituacao,

        ));

    }


    ...


    private function criaModelos($model, $data)

    {

        $obj = array();

        foreach($data as $item ){

            $objModel = new $model;

            $objModel->attributes = $item;

            $obj[] = $objModel;

        }

        return $obj;

    }

    ...

}




Bom acredito que deva funcionar