Primero analicen las siguientes clases:
Si estas dos clases se ejecutan para crear las correspondiente tablas nos da el siguiente error:
SQLSTATE[HY000]: General error: 1005 Can't create table '.\siscolab\#sql-88c_22.frm' (errno: 121). Failing Query: "ALTER TABLE ` historialexpedientesdefensoria ` ADD CONSTRAINT `hiei` FOREIGN KEY (`id_ estadoexpedientedefensoria`) REFERENCES `estadosexpedientedefensoria`( `id`)". Failing Query: ALTER TABLE ` historialexpedientesdefensoria ` ADD CONSTRAINT `hiei` FOREIGN KEY (`id_ estadoexpedientedefensoria`) REFERENCES `estadosexpedientedefensoria`( `id`)
Doctrine intenta crear el constraint de la relación haciendo una combinación de los nombres de las tablas relacionadas. En este caso existió la casualidad de que existen esas tablas con estructuras y relaciones bastante parecidas, creando el error de ejecución anterior.
Para resolver este debemos hacer uso de la opcion foreignKeyName al crear las relaciones, tanto con el hasOne como con el hasMany, esto en al menos una de las clases y entonces quedaría como sigue.
Esto ya resuelve el problema del errno 121
class HistorialExpedienteConciliacionIndividual extends Doctrine_Record { public function setTableDefinition() { $this->setTableName('HistorialExpedienteConciliacionIndividual'); $this->hasColumn('id_estado','integer'); $this->hasColumn('id_expediente','integer'); $this->hasColumn('id_usuario', 'integer'); } public function setUp() { $this->hasOne('EstadoExpediente as estado',array('local'=>'id_estado','foreign'=>'id')); $this->hasOne('ExpedienteConciliacionIndividual as expediente',array('local'=>'id_expediente','foreign'=>'id')); $this->hasOne('Usuario', array('local'=>'id_usuario','foreign'=>'id')); $this->actAs('Timestampable'); } }
class HistorialExpedienteDefensoria extends Doctrine_Record { public function setTableDefinition() { $this->setTableName('historialexpedientesdefensoria'); $this->hasColumn('fecha','date'); $this->hasColumn('id_estadoexpedientedefensoria','integer',null); $this->hasColumn('id_juzgado','integer',null); $this->hasColumn('id_expediente','integer',null); } public function setUp() { $this->hasOne('OrganoJuzgado',array('local'=>'id_juzgado','foreign'=>'id')); $this->hasOne('EstadoExpedienteDefensoria as estados', array('local' => 'id_estadoexpedientedefensoria', 'foreign' => 'id')); $this->hasOne('ExpedienteDefensoria as expedientes', array('local' => 'id_expediente', 'foreign' => 'id')); $this->actAs('Timestampable'); } }
Si estas dos clases se ejecutan para crear las correspondiente tablas nos da el siguiente error:
SQLSTATE[HY000]: General error: 1005 Can't create table '.\siscolab\#sql-88c_22.frm' (errno: 121). Failing Query: "ALTER TABLE `
Doctrine intenta crear el constraint de la relación haciendo una combinación de los nombres de las tablas relacionadas. En este caso existió la casualidad de que existen esas tablas con estructuras y relaciones bastante parecidas, creando el error de ejecución anterior.
Para resolver este debemos hacer uso de la opcion foreignKeyName al crear las relaciones, tanto con el hasOne como con el hasMany, esto en al menos una de las clases y entonces quedaría como sigue.
class HistorialExpedienteConciliacionIndividual extends Doctrine_Record { public function setTableDefinition() { $this->setTableName('HistorialExpedienteConciliacionIndividual'); $this->hasColumn('id_estado','integer'); $this->hasColumn('id_expediente','integer'); $this->hasColumn('id_usuario', 'integer'); } public function setUp() { $this->hasOne('EstadoExpediente as estado',array('local'=>'id_estado','foreign'=>'id', 'foreignKeyName' => 'fk_estados_historialconciliacion')); $this->hasOne('ExpedienteConciliacionIndividual as expediente',array('local'=>'id_expediente','foreign'=>'id', 'foreignKeyName' => 'fx_expedientes_historialconciliacion')); $this->hasOne('Usuario', array('local'=>'id_usuario','foreign'=>'id')); $this->actAs('Timestampable'); } }
Esto ya resuelve el problema del errno 121
Comentarios
Publicar un comentario