Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

[CakePHP] hasMany, belongsTo

Estas en el tema de [CakePHP] hasMany, belongsTo en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, Estoy liado con unas relaciones y demás. He conseguido que los find() hagan los joins que tocan y demás pero estoy intentando hacer que ...
  #1 (permalink)  
Antiguo 29/01/2009, 18:02
 
Fecha de Ingreso: noviembre-2005
Ubicación: /dev/null
Mensajes: 23
Antigüedad: 18 años, 5 meses
Puntos: 0
[CakePHP] hasMany, belongsTo

Buenas,

Estoy liado con unas relaciones y demás. He conseguido que los find()
hagan los joins que tocan y demás pero estoy intentando hacer que
guardar datos en la base de datos sea más fácil.

Para empezar no entiendo en la parte de documentación porque dicen que
hay que hacer un create() antes del save() si a la hora de guardar se
está dentro de un bucle. Alguien puede explicarmelo mejor?

Y la otra es, yo tengo una tabla Teams (id, name) y otra Calendars
(id, local_id, away_id , date) he puesto esto en los modelos para que
todo funciones bien:

team.php
$hasMany = 'Calendar';

calendar.php
$belongsTo = array('Local' => array('className' => 'Team','foreignKey'
=> 'local_id'), 'Away' => array('className' => 'Team','foreignKey' =>
'away_id'));

La duda es que yo recibo el Calendar con los nombres de los equipos y
claro tengo que añadirlos si no están o sacar la ID si sí están. Solo
me gustaría saber si hay alguna manera de hacerlo más rápido que
teniendo que montar find's e if's a mano.
  #2 (permalink)  
Antiguo 30/01/2009, 16:45
 
Fecha de Ingreso: octubre-2005
Mensajes: 42
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: [CakePHP] hasMany, belongsTo

A la primera parte te digo que lo de usar create es la forma de trabajar de CakePHP. En la documentación dice:
Cita:
Initializes the model for writing a new record, loading the default values for those fields that are not defined in $data. Especially helpful for saving data in loops.
Creo que es bastante claro. Después de hacer un save, si quieres guardar otro registro diferente tienes que llamar a create.
No estoy muy seguro de esto pero creo que es porque después de hacer save en Modelo->id se guarda el ID, ya sea update o insert. Al intentar hacer otro save, CakePHP piensa que es sobre el registro anterior, porque Modelo->id tiene un valor.

Sobre la segunda parte. Cuando haces un save pasandole unos datos, si en esos datos hay un ID definido y existente entonces CakePHP hace un update sobre el registro de la tabla. Si no se le pasa un ID o no existe previamente en la tabla, entonces hace un insert.
Así pues, respondiendo a tu pregunta, te lo tendrás que currar para diferenciar cuando existe y cuando no.
Lo mejor, si el bucle tiene muchos elementos y de cara a evitar hacer tantas consultas, es que intentes pasarle, además del nombre del equipo, el ID si lo tuviera. Así te ahorrarías los find.

CakePHP automatiza muchos procesos pero no hace milagros...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:20.