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

Cakephp Guardar datos en tablas relacionadas

Estas en el tema de Guardar datos en tablas relacionadas en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, no puedo hacer q se guarden los datos de un formulario en tablas relacionadas. Tengo el form y los campos son de una tabla ...
  #1 (permalink)  
Antiguo 29/01/2014, 07:13
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Guardar datos en tablas relacionadas

Hola,

no puedo hacer q se guarden los datos de un formulario en tablas relacionadas.
Tengo el form y los campos son de una tabla y de otra, o sea, datos de diferentes modelos.

Probe haciendo lo del book pero no se como guardar los datos en sus respectivas tablas.

Tengo dos tablas:
-tickets
-ticket_responses

...y quiero crear un ticket
Código MySQL:
Ver original
  1. tickets
  2. id
  3. from_user_id
  4. to_user_id
  5. subject
  6. -----------------
  7. ticket_responses
  8. id
  9. ticket_id
  10. from_user_id
  11. body

Yo tengo el form:
Código PHP:
    //Creo el form Ticket
    
echo $this->Form->create('Ticket');
    
    
//Ticket Asunto
    
echo $this->Form->input('Ticket.subject',
                            array(
'label' => 'Asunto'));
    
//Ticket Para
    
echo $this->Form->input('Ticket.para', array(
                                    
'options' => array(
                                        
'1' => 'User Uno',
                                        
'2' => 'User Dos',
                                        
'3' => 'User Tres',
                                            )));

    
//Ticket Mensaje - esto va en otra tabla
    
echo $this->Form->input('TicketResponse.body'
                        array(
'type' => 'textarea''label' => 'Escriba un mensaje'));

    echo 
$this->Form->end(__('Send')); 
Eso lo saque del book, pero como recojo los datos q vienen de ese form? y como los guardo segun la tabla a la q pertenecen?, incluyendo el user_id y el ticket_id q son claves foraneas usando saveAssociated()?

Espero se haya entendido.

Gracias
  #2 (permalink)  
Antiguo 29/01/2014, 08:17
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Guardar datos en tablas relacionadas

Si yo hago un pr() me trae perfecto los datos pero no me los inserta y me tira erro de clave foranea.

Código:
Array
(
    [Ticket] => Array
        (
            [subject] => prueba ticket associated
            [from_user_id] => 1
            [to_user_id] => 1
        )

    [TicketResponse] => Array
        (
            [description] => mensaje prueba associated
            [from_user_id] => 1
        )

)
...pero si lo quiero guardar me salta el tipico error:
Cita:
Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`blog2`.`ticket_responses`, CONSTRAINT `ticket_responses_ibfk_2` FOREIGN KEY (`from_user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE)

para guardar estoy haciendo esto:
Código PHP:
$this->Ticket->saveAssociated($this->request->data

Última edición por reborn; 29/01/2014 a las 08:41
  #3 (permalink)  
Antiguo 29/01/2014, 09:04
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Guardar datos en tablas relacionadas

Creo q el problema me lo esta dando el tema de las asociaciones (hasMany, belongsTo, etc)
Voy a crear otro post
  #4 (permalink)  
Antiguo 30/01/2014, 07:14
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Guardar datos en tablas relacionadas

Soy un pel***do importante!

El error se debia a q no estaba utilizando correctamente los campos en el form para la asociacion hasMany.

Yo estaba haciendo:
Código PHP:
Ver original
  1. echo $this->Form->input('TicketResponse.body',
  2.                         array('type' => 'textarea', 'label' => 'Mensaje'));
...pero eso se utiliza cuando la asociacion es hasOne

...para hasMany se usa la forma:
Código PHP:
Ver original
  1. echo $this->Form->input('TicketResponse.0.body',
  2.                         array('type' => 'textarea', 'label' => 'Mensaje'));

Y se ve claramente el error haciendo un pr en ambos casos

Etiquetas: cakephp, campo, relacionadas, tabla, tablas
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 07:16.