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

De KumbiaPHP Framework Wiki
Línea 58: Línea 58:
  
 
==La Consulta==
 
==La Consulta==
La consulta seria en un controller...<br><br>
+
La consulta seria en un controller...<br>
  
$this->profesionales = $this->Profesionales->find();<br><br><br>
+
<source lang=php>
 
+
$this->profesionales = $this->Profesionales->find();
y para obetener la relacion de un profesional obviamente hay q 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><br>
+
</source>
foreach ($profesionales as $profesional){<br>
+
<br>
echo $profesional->nombre;<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>
echo $profesional->Especialidades()->nombre;<br>
+
<source lang=php>
}<br>
+
foreach ($profesionales as $profesional){
 +
echo $profesional->nombre;
 +
        echo $profesional->Especialidades()->nombre;
 +
}
 +
</source>

Revisión del 16:45 22 sep 2009

Aquí Breve explicación...

Estructura de las Tablas

CREATE TABLE `profesionales` (
  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,
  `apellido` VARCHAR(45) COLLATE utf8_spanish_ci NOT NULL DEFAULT '',
  `nombre` VARCHAR(45) COLLATE utf8_spanish_ci NOT NULL DEFAULT '',
)ENGINE=InnoDB


CREATE TABLE `especialidades` (
  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,
  `nombre` VARCHAR(45) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `profesionales_id` INTEGER(11) NOT NULL,
)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'.

Relacion tablas.png

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;
}