Antes que nada valdría aclarar que esto resuelve un problema en los modelos de cakePHP 1.1, no se si el problema seguirá en la 1.2 o no.
Luego de perder toda una mañana dándole vueltas a mi aplicación preguntándome “¿porque me da error de conexión al servidor si estoy como localhost?” (aun no entiendo porque daba ese error), llegue a darme cuenta que el problema estaba en el modelo, pero aun así ¿cual era el error?
Entonces me puse a borrar parte por parte hasta que anduviera, y encontré que si borraba una declaración en particular, andaba, la volvía a poner y de nuevo no andaba. Me fije gramaticalmente y no había error, revise la documentación de cakePHP pero no encontré nada, mi problema en el modelo persistía, busque en google y tampoco. ¿entonces?
Ya se que te estoy mareando al pedo, así que voy al grano, la cuestión es que por diferentes experimentos (a lo largo de un par de horas) y por mera casualidad y curiosidad, se me ocurrió cambiar el orden en que estaban declaradas mis relaciones “belongsTo” y mágicamente volvió a andar.
Resulta ser que al señor “torta” no le gusta que empieces por declara las relaciones que serán traídas con diferente nombre que el modelo del que se traerán, él quiere que primero declares todas en la que modelo y nombre de relación coincidan y luego en las que no. ¿lo que digo es un lío? ¿sera mejor un ejemplo? Claro que si, ahora viene el ejemplo y lo entendes como la tabla del 2.
Supongamos que tenemos un modelo “casa” este debe pertenecer a un “barrio” que tiene muchas casas y a la vez pertenece a una “persona” que también puede tener varias casas. (prohibido buscarle fallas al modelo, es solo un ejemplo rápido). Entonces definimos una relación llamada “barrio” con el modelo “barrio”, y una relación llamada “propietario” con el modelo “persona”. La cuestión es que si primero definimos barrio y luego propietario, todo lindo y feliz, pero si lo hacemos al revez, cakePHP pasara a formar parte de nuestras pesadillas hasta que pongamos en el orden que corresponda.
Forma incorrecta
class Casa extends AppModel {
var $name = 'Casa';
var $belongsTo = array(
'Propietario' => array(
'className' => 'Persona',
'foreignKey' => 'persona_id'
),
'Barrio' => array(
'className' => 'Barrio',
'foreignKey' => 'barrio_id'
)
);
}
?>
Forma correcta
class Casa extends AppModel {
var $name = 'Casa';
var $belongsTo = array(
'Barrio' => array(
'className' => 'Barrio',
'foreignKey' => 'barrio_id'
),
'Propietario' => array(
'className' => 'Persona',
'foreignKey' => 'persona_id'
)
);
}
?>