Diferencia entre revisiones de «Como Crear Relacion 1:N KumbiaPHP Framework»
| Línea 3: | Línea 3: | ||
==Estructura de las Tablas== | ==Estructura de las Tablas== | ||
| − | <pre>CREATE TABLE ` | + | <pre> |
| − | `id` | + | -- ----------------------------------------------------- |
| − | ` | + | -- Table `mydb`.`especialidades` |
| − | ` | + | -- ----------------------------------------------------- |
| − | + | CREATE TABLE IF NOT EXISTS `mydb`.`especialidades` ( | |
| − | + | `id` INT NOT NULL , | |
| + | `nombre` VARCHAR(45) NULL , | ||
| + | PRIMARY KEY (`id`) ) | ||
| + | ENGINE = InnoDB; | ||
| − | + | -- ----------------------------------------------------- | |
| − | `id` | + | -- Table `mydb`.`profesionales` |
| − | `nombre` VARCHAR(45) | + | -- ----------------------------------------------------- |
| − | ` | + | CREATE TABLE IF NOT EXISTS `mydb`.`profesionales` ( |
| − | )ENGINE=InnoDB</pre> | + | `id` INT NOT NULL AUTO_INCREMENT , |
| + | `nombre` VARCHAR(45) NULL , | ||
| + | `apellido` VARCHAR(45) NULL , | ||
| + | `especialidades_id` INT NOT NULL , | ||
| + | PRIMARY KEY (`id`) , | ||
| + | INDEX `fk_profesionales_especialidades` (`especialidades_id` ASC) , | ||
| + | CONSTRAINT `fk_profesionales_especialidades` | ||
| + | FOREIGN KEY (`especialidades_id` ) | ||
| + | REFERENCES `mydb`.`especialidades` (`id` ) | ||
| + | ON DELETE NO ACTION | ||
| + | ON UPDATE NO ACTION) | ||
| + | ENGINE = InnoDB; | ||
| + | </pre> | ||
==Descripcion del Modelo== | ==Descripcion del Modelo== | ||
Revisión del 18:21 22 sep 2009
Aquí Breve explicación...
Estructura de las Tablas
-- -----------------------------------------------------
-- Table `mydb`.`especialidades`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`especialidades` (
`id` INT NOT NULL ,
`nombre` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`profesionales`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`profesionales` (
`id` INT NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(45) NULL ,
`apellido` VARCHAR(45) NULL ,
`especialidades_id` INT NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_profesionales_especialidades` (`especialidades_id` ASC) ,
CONSTRAINT `fk_profesionales_especialidades`
FOREIGN KEY (`especialidades_id` )
REFERENCES `mydb`.`especialidades` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Descripcion del Modelo
El mnodelo esta compuesto por dos tablas: Profesionales y Especialidades, la tabla 'profesionales' esta diseñada para llevara los datos de todos los profesionales de una empresa interdisciplinaria, estos profesionales pueden ser: medicos, abogados, ingenieros, etc.
La tabla 'especialidades' hace referencia a las distintas orientaciones dentro la profesion , por ejemplo:
Profesion: Medico || especialidad: clinico, cardiologo, oftalmologo, etc.
Profesion: Ingeniero || especialidad: civil, sistemas, contrucciones, electronicos, etc.
Las tablas estan creadas en mysql , y estan relacionadas por el campo 'id'.
El Modelo
Con el metodo Belongs_to, se establece una relacion de "pertenece a", es decir de una relacion 1:1(Modelo ER) entre el profesional y la especialidad desarrollada por el mismo.
Por otra parte con Has_many, la relacion es de "tiene muchos", es decir una relacion 1:n(Modelo ER), en el caso del ejemplo una especialidad puede tener (engloba)a varios profesionales.
class Profesionales extends ActiveRecord
{
public function initialize()
{
//Relaciones
//Un profesional tiene una especialidad
$this->belongs_to('especialidad');
}
}
class Especialidades extends ActiveRecord
{
public function initialize()
{
//Relaciones
//Un especialidad tiene muchos profesionales
$this->has_many('profesionales');
}
}La Consulta
La consulta seria en un controller...
$this->profesionales = $this->Profesionales->find();
y para obtener la relacion de un profesional obviamente hay que recorrer el array que devolvio el find pero internamente en cada objecto esta la relacion porque asi la definimos 1 profesional tiene una especialidad.
foreach ($profesionales as $profesional){
echo $profesional->nombre;
echo $profesional->Especialidades()->nombre;
}