Diferencia entre revisiones de «Como Crear Relacion 1:N KumbiaPHP Framework»

De KumbiaPHP Framework Wiki
Línea 1: Línea 1:
 
En este ejemplo se explica como se realizan asociaciones sobre nuestro modelos haciendo uso de las '''Relaciones de ActiveRecord'''.
 
En este ejemplo se explica como se realizan asociaciones sobre nuestro modelos haciendo uso de las '''Relaciones de ActiveRecord'''.
  
Tenemos dos tablas (especialidades y profesionales) entre las cuales existe una relación de 1:N (1 a muchos), es decir un profesional tiene una especialidad (para efecto del ejemplo) y una especialidad tiene muchos profesionales, la idea de las relaciones en [http://www.kumbiaphp.com KumbiaPHP] es que cuando se realice una búsqueda de profesionales implícitamente este su relación, en este caso seria su especialidad.
+
Tenemos dos tablas (especialidades y profesionales) entre las cuales existe una relación de 1:N (1 a muchos), es decir un profesional tiene una especialidad (para efecto del ejemplo) y una especialidad tiene muchos profesionales, la idea de las relaciones en [http://www.kumbiaphp.com KumbiaPHP] es que cuando se realice una búsqueda de profesionales implícitamente este su relación, en este caso seria su especialidad (un objeto) y cuando se realice una búsqueda por especialidad obtener los profesionales (array de objectos) asociados a esta.
  
 
==Estructura de las Tablas==
 
==Estructura de las Tablas==
Línea 41: Línea 41:
 
==El Modelo==
 
==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.<br>
+
Con el método [[Asociaciones#Pertenece_.28belongs_to.29 | belongs_to()]], se establece una relación de '''pertenece a''', es decir de una relación 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.<br>
+
 
 +
Por otra parte con [[Asociaciones#Tiene_muchos_.28has_many.29 | has_many()]], se establece una relación es de '''tiene muchos''', es decir una relación 1:N (Modelo ER), en el caso del ejemplo una especialidad puede tener (engloba) a varios profesionales.
 +
 
 
<source lang=php>
 
<source lang=php>
 
class Profesionales extends ActiveRecord
 
class Profesionales extends ActiveRecord
Línea 53: Línea 55:
 
     }
 
     }
 
}
 
}
</source><br><BR>
+
</source>
 +
 
 +
 
 
<source lang=php>
 
<source lang=php>
 
class Especialidades extends ActiveRecord
 
class Especialidades extends ActiveRecord
Línea 72: Línea 76:
 
$this->profesionales = $this->Profesionales->find();
 
$this->profesionales = $this->Profesionales->find();
 
</source>
 
</source>
<br>
+
 
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.<br><br>
+
 
 +
Para obtener la relación de un profesional obviamente hay que recorrer el array que devolvió el método [[Consultas#find | find()]] pero internamente en cada objecto esta la relación porque así fue definida Un Profesional tiene una especialidad.
 +
 
 +
 
 
<source lang=php>
 
<source lang=php>
 
foreach ($profesionales as $profesional){
 
foreach ($profesionales as $profesional){
Línea 80: Línea 87:
 
}
 
}
 
</source>
 
</source>
 +
 
[[Categoría:Tutoriales KumbiaPHP]]
 
[[Categoría:Tutoriales KumbiaPHP]]

Revisión del 23:38 22 sep 2009

En este ejemplo se explica como se realizan asociaciones sobre nuestro modelos haciendo uso de las Relaciones de ActiveRecord.

Tenemos dos tablas (especialidades y profesionales) entre las cuales existe una relación de 1:N (1 a muchos), es decir un profesional tiene una especialidad (para efecto del ejemplo) y una especialidad tiene muchos profesionales, la idea de las relaciones en KumbiaPHP es que cuando se realice una búsqueda de profesionales implícitamente este su relación, en este caso seria su especialidad (un objeto) y cuando se realice una búsqueda por especialidad obtener los profesionales (array de objectos) asociados a esta.

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;

Relación entre los Modelos

Relacion.jpg

El Modelo

Con el método belongs_to(), se establece una relación de pertenece a, es decir de una relación 1:1 (Modelo ER) entre el profesional y la especialidad desarrollada por el mismo.

Por otra parte con has_many(), se establece una relación es de tiene muchos, es decir una relación 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();


Para obtener la relación de un profesional obviamente hay que recorrer el array que devolvió el método find() pero internamente en cada objecto esta la relación porque así fue definida Un Profesional tiene una especialidad.


foreach ($profesionales as $profesional){
	echo $profesional->nombre;
        echo $profesional->Especialidades()->nombre;
}