Insercion De Dos Registros Diferentes En Un Mismo Modelo

Hola comunidad,

mi problema consiste en como adaptar el metodo ActionCreate de un Controller para grabar un nuevo registro de otra tabla despues de haber grabado el registro correspondiente al modelo del controlador.

Voy a explicarme mejor: tengo dos tablas A y B, A es el padre de B. Tengo el Controlador y modelo de la tabla A, y solamente el modelo de la tabla B. Los datos de la tabla B se encuentran en la tabla A. Cuando el metodo ActionCreate del Controlador A grabe el registro de la tabla A, entonces se debe grabar el registro de la tabla B.

Aqui esta el codigo que me crea un registro NULO:

private $_tablaB;

public function actionCreate()

{

$model=new TABLA_A;

if(isset($_POST[‘tablaA’]))

{

 $model->attributes=$_POST['tablaA'];


 if($model->save()) {


     $this->_tablaB = new tablaB; Instancio el Modelo de la Tabla B

$this->_tablaB->attributes = array(‘id’=>NULL, item1=>$model->id_item1, ‘id_tablaA’=>model->ID,); Asigno los valores de la tabla B en funcion de los valores de la Tabla A

$this->_tablaB->save(); Almaceno el registro de la Tabla B $this->redirect(array(‘view’,‘id’=>$model->iD));

   }


   $this->render('create',array( 'model'=>$model, ));

}

Que estoy haciendo de forma incorrecta, cualquier ayuda es bienvenida. Gracias

Hola,

a mi cuando no me graba un registro siempre es porque no supera alguna regla de validación. La otra posibilidad que se me ocurre es que sobre la asignación NULL al id de la tabla_B si es autoincremental.

Un saludo




public function actionCreate()

    {

        $transaction=Yii::app()->db->beginTransaction();    

        

        try

    { 

$modelA=new ModelA;                                                                                          


            if(isset($_POST['ModelA']))             

            {

                $modelA->attributes=$_POST['ModelA'];


                if($modelA->save())              

                {


                    $modelB=new ModelB;

                    $modelB->IdmodelB=$modelA->IdmodelA;

                    $modelB->campoB='campob';

 

                    $modelB->save();


                    $transaction->commit();                 

                   

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

                }

            }

            

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

                                        'modelA'=>$modelA,

                                        ));

        }

        catch(Exception $e)                                 

        {

           $transaction->rollback();                        

        }

    }



Aunque me imagino q el




'id'=>NULL

te dará error pq no creo q quieras un identificador nulo.

Un saludo.