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,
));
}