Foros del Web » Programando para Internet » PHP » Symfony »

Crear clave foránea compuesta

Estas en el tema de Crear clave foránea compuesta en el foro de Symfony en Foros del Web. Saludos.. Por favor si me pueden ayudar, necesito crear una clave foranea compuesta, estoy programando en Symfony2. Mis tablas son las siguientes CURSO: cur-codigo -> ...
  #1 (permalink)  
Antiguo 10/06/2014, 18:24
 
Fecha de Ingreso: junio-2014
Ubicación: Riobamba
Mensajes: 24
Antigüedad: 10 años, 6 meses
Puntos: 0
Crear clave foránea compuesta

Saludos..

Por favor si me pueden ayudar, necesito crear una clave foranea compuesta, estoy programando en Symfony2. Mis tablas son las siguientes

CURSO:
cur-codigo -> PK
cur-nombre


PARALELO:
par-codigo -> PK
par-nombre

NIVEL:
niv-paralelocodigo -> PK
niv-cursocodigo -> PK


Entonces en la tabla nivel se crea una PK compuesta de las tablas curso y paralelo

Ahora tengo dos tablas más

PERIODO
per-codigo -> PK
per-nombre


ESTUDIANTE
est-codigo -> PK
est-nombre

Las tablas periodo y estudiante forman una tabla N a N llamada "Matricula", la cual tiene como PK compuesta los Id's de periodo y estudiante; pero tambien recibe una FK compuesta de la tabla Nivel (niv_cursocodigo,niv_paralelocodigo).

Estoy trabajando con anotaciones ORM, por lo cual me gustaría saber como puedo definir la anotacion que me permita crear la FK compuesta de la tabla nivel.


A continuación las Entidades que he creado junto con las anotaciones

class Curso {

/**
* @ORM\Id
* @ORM\Column(name="cur_codigo",type="integer")
* @ORM\GeneratedValue
*/
protected $cur_codigo;

/** @ORM\Column(type="string", length=32, nullable=false) */
protected $cur_nombre;
}

------

class Paralelo {

/**
* @ORM\Id
*@ORM\Column(name="par_codigo", type="integer")
* @ORM\GeneratedValue
*/
protected $par_codigo;

/** @ORM\Column(type="string", length=32, nullable=false) */
protected $par_nombre;
}

------

class Nivel {




/** @ORM\Column(type="string", length=128, nullable=true) */
protected $niv_descripcion;

/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="yony\academicoBundle\ Entity\Curso")
* @ORM\JoinColumn(name="niv_curcodigo", referencedColumnName="cur_codigo")
*/
protected $niv_curcodigo;

/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="yony\academicoBundle\ Entity\Paralelo")
* @ORM\JoinColumn(name="niv_parcodigo", referencedColumnName="par_codigo")
*/
protected $niv_parcodigo;

}

----

class Periodo {


/**
* @ORM\Id
* @ORM\Column(name="per_codigo", type="integer")
* @ORM\GeneratedValue
*/
protected $per_codigo;

/** @ORM\Column(type="string", length=32) */
protected $per_nombre;
}

-----


class Estudiante {

/**
* @ORM\Id
* @ORM\Column(name="est_codigo", type="integer")
* @ORM\GeneratedValue
*/
protected $est_codigo;


/** @ORM\Column(type="string", length=64, nullable=true) */
protected $est_nombre;
}


---
Entonces no se como definir las anotaciones en la clase Matricula, para declarar un FK compuesta que viene de la tabla Nivel.

Por la atención gracias...
  #2 (permalink)  
Antiguo 10/06/2014, 18:41
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Crear clave foránea compuesta

Desde el momento que Matricula necesita el FK de nivel ya deja de ser una relación N:N y se convierte en una clase asociación. ver la nota en el manual: http://docs.doctrine-project.org/en/...unidirectional
Tambien es importante que leas sobre el soporte para llaves compuestas: http://docs.doctrine-project.org/pro...mary-keys.html
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Última edición por hhs; 10/06/2014 a las 18:53
  #3 (permalink)  
Antiguo 10/06/2014, 21:33
 
Fecha de Ingreso: junio-2014
Ubicación: Riobamba
Mensajes: 24
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Crear clave foránea compuesta

Gracias por tu respuesta, si me he leído esa documentación, el problema que tengo es que no se como hacer las anotaciones de la clave foránea que viene de la clase nivel.

A continuación, defino la PK compuesta que se forma de las clases: periodo y estudiante, y quiero hacer FK compuesta de nivel, pero no se como hacer esa anotacion...

Clase Matrícula

Código PHP:

use DoctrineORMMapping as ORM;

/**
 * @ORM\Entity
 */

class Matricula {
    
    
/**
     * @ORM\Id 
     * @ORM\ManyToOne(targetEntity="Periodo") 
     * @ORM\JoinColumn(name="mat_percodigo", referencedColumnName="per_codigo")
     */
    
protected $periodo;
    
    
    
/**
     * @ORM\Id 
     * @ORM\ManyToOne(targetEntity="Estudiante") 
     * @ORM\JoinColumn(name="mat_estcodigo", referencedColumnName="est_codigo")
     */
    
protected $estudiante;



    
// --- esta anotacion no se como definirla---//


    /**
     * @ORM\ManyToOne(targetEntity="Nivel") 
     */
    
protected $nivel

Última edición por yonynet; 11/06/2014 a las 11:29
  #4 (permalink)  
Antiguo 11/06/2014, 17:00
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Crear clave foránea compuesta

La propiedad $nivel debe de tener un @JoinColumn para cada columna que compone la llave compuesta.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: key, symfony2
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:39.