Grabar Dos Modelos Dependientes

Estoy tratando de realizar una operación que se encuentra documentada y con ejemplos.

Esto es grabar, en mi caso, una empresa y un conjunto de teléfonos asociados a ella en una segunda tabla.

Tengo la relación de clave foránea entre teléfono y empresa, a través del idEmpresa.

En el un servidor se ejecuta correctamente, mientras que en otro no es posible dado que falla, en mi controlador, al grabar el primer teléfono por que no tengo ingresada la empresa.

El error es algo parecido a ésto.

‘CDbException’ with message 'CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (aplicaci_trustee.Phone, CONSTRAINT PhoneEmpresa FOREIGN KEY (idEmpresa) REFERENCES trustee.empresa (idEmpresa) ON DELETE CASCADE ON UPDATE CASCADE)

Y mi código es éste en la acción de creación.

public function actionCreate()

{


    $model=new Empresa;


    $phonedetails = array(new Phone());


    // Uncomment the following line if AJAX validation is needed


    // $this->performAjaxValidation($model);





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


    {


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





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


            $phonedetails = array();


            foreach ($_POST['Phone'] as $key => $value) {


                $phone = new Phone();


                $phone->attributes = $value;


                $phonedetails[] = $phone;


            }


        }


        $transaction = $model->getDbConnection()->beginTransaction();


                        $success = $model->save();


                        $model->refresh();


                    echo $model->idEmpresa;


        try {


	foreach ($phonedetails as $phone) {


        	$phone->idEmpresa = $model->idEmpresa;


                $success = $success ? $phone->save(false) : $success;


        }


	if(success)


	{


        	$transaction->commit();


        }


        else


        {	


        	$transaction->rollback();


        }





        } catch (Exception $e) {


            //$transaction->rollback();





        }


    }


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


        'model'=>$model,


        'phonedetails'=>$phonedetails,


    ));





}

Buenas.

Mira, esta Exception q te cito arriba creo que te dice claramente que es lo q te está fallando.

Y en mi opinión en el servidor que te falla no están bien definidas las relaciones en la propia base de datos , no en Yii. Podría ser también en Yii, pero como dices que en un server te funciona y en otro no, imagino que debe ser tema de la base de datos.

Y entiendo q tendrás el framework correctamente instalado en los 2 servers, la configuración correcta,etc…

Un saludo.

Solo por eliminar errores tontos, si estas usando cache borra el contenido (no la carpeta) de protected/runtime/cache.