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

Cakephp Como asociar los siguientes modelos relacionados?

Estas en el tema de Como asociar los siguientes modelos relacionados? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, tengo el modelo User, el modelo Ticket y el modelo TicketResponse relacionados por id de la siguiente forma User id ... ---------------- Ticket id ...
  #1 (permalink)  
Antiguo 29/01/2014, 09:32
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Como asociar los siguientes modelos relacionados?

Hola,

tengo el modelo User, el modelo Ticket y el modelo TicketResponse relacionados por id de la siguiente forma

User
id
...
----------------
Ticket
id
from_user_id -> id.User
to_user_id -> id.User
subject
-----------------
TicketResponses
id
ticket_id -> id.Ticket
from_user_id -> id.User
body

Las relaciones serian:
- Un usuario puede crear varios tickets
- Un ticket pertenece solo a UN usuario
- Un ticket puede tener NINGUNA/VARIAS respuestas y NINGUNO/UNO usuarios

Resumiendo: yo mando un ticket a un usuario y me lo puede responder o no.

Como llevo eso a hasMany, belongsTo, etc?

Esto fue lo q hice, no se si esta bien planteado y usado:

Ticket.php
Código PHP:
class Ticket extends AppModel{
        
//un ticket pertenece solo a UN usuario
        
public $belongsTo = array(
        
'User' => array(
            
'className' => 'User',
            
'foreignKey' => 'id'
        
)
        );
        
        
//un ticket puede tener ninguna/varias respuestas
        
public $hasMany = array(
        
'TicketResponse' => array(
            
'className' => 'TicketResponse',
            
'foreignKey' => 'ticket_id'
            
            
)           
    );

TicketResponse.php
Código PHP:
class TicketResponse extends AppModel{
        
//una respuesta pertenece a UN SOLO ticket y a UN solo usuario
        
public $belongsTo = array(
            
'Ticket' => array(
                
'className' => 'Ticket',
                
'foreignKey' => 'id'
            
),
            
'User' => array(
                
'className' => 'User',
                
'foreignKey' => 'id'

                
)   
        );

  #2 (permalink)  
Antiguo 30/01/2014, 04:02
 
Fecha de Ingreso: abril-2013
Mensajes: 61
Antigüedad: 11 años, 7 meses
Puntos: 4
Respuesta: Como asociar los siguientes modelos relacionados?

Creo que tienes mal, las "foreignkey" del ticketresponse

Código PHP:
Ver original
  1. class TicketResponse extends AppModel{
  2.         //una respuesta pertenece a UN SOLO ticket y a UN solo usuario
  3.         public $belongsTo = array(
  4.             'Ticket' => array(
  5.                 'className' => 'Ticket',
  6.                 'foreignKey' => 'ticket_id'
  7.             ),
  8.             'User' => array(
  9.                 'className' => 'User',
  10.                 'foreignKey' => 'from_user_id'
  11.  
  12.                 )    
  13.         );
  14. }
  #3 (permalink)  
Antiguo 30/01/2014, 04:59
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Como asociar los siguientes modelos relacionados?

Cita:
Iniciado por nanotk58 Ver Mensaje
Creo que tienes mal, las "foreignkey" del ticketresponse
Gracias, ahora lo voy a revisar.
Ayer me puse a leer toda la mañana sobre asociaciones y me queme la cabeza, ya ni sabia q hacia
  #4 (permalink)  
Antiguo 30/01/2014, 07:00
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Como asociar los siguientes modelos relacionados?

La verdad no encuentro el error. Ya revise los tipos de datos, vacie las tablas y las volvi a crear pero me sigue tirando el mismo error con la tabla ticket_responses y el error es con el id de usuario a insertar, q ya existe, no se por q no lo inserta
  #5 (permalink)  
Antiguo 30/01/2014, 07:13
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Como asociar los siguientes modelos relacionados?

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: asociar, cakephp, modelos, php, siguientes, usuario
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 09:58.