Revisión actual |
Tu texto |
Línea 1: |
Línea 1: |
− | {{cleanupbox
| + | Aquí Breve explicación... |
− | |image=[[Archivo:Import.png|40px]]
| |
− | |texto ='''Este Artículo esta siendo revisado por los Kumbieros.'''<br />
| |
− | <span style="font-size:90%">El ejemplo presente es completamente funcional, pero su redacción debe mejorar</span>
| |
− | }}
| |
− | | |
− | 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 (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 33: |
| </source> | | </source> |
| | | |
− | ==Relación entre los Modelos== | + | ==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:<br><br> |
| + | |
| + | Profesion: Medico || especialidad: clinico, cardiologo, oftalmologo, etc.<br> |
| + | Profesion: Ingeniero || especialidad: civil, sistemas, contrucciones, electronicos, etc.<br><br> |
| + | |
| + | |
| + | Las tablas estan creadas en mysql , y estan relacionadas por el campo 'id'.<br><br> |
| | | |
| [[Archivo:Relacion.jpg]] | | [[Archivo:Relacion.jpg]] |
Línea 47: |
Línea 48: |
| ==El Modelo== | | ==El Modelo== |
| | | |
− | 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. | + | 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> |
− | | + | 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> |
− | <?php
| |
| class Profesionales extends ActiveRecord | | class Profesionales extends ActiveRecord |
| { | | { |
Línea 59: |
Línea 57: |
| //Relaciones | | //Relaciones |
| //Un profesional tiene una especialidad | | //Un profesional tiene una especialidad |
− | $this->belongs_to('especialidades'); | + | $this->belongs_to('especialidad'); |
| } | | } |
| } | | } |
− | </source> | + | </source><br><BR> |
− | | |
− | | |
| <source lang=php> | | <source lang=php> |
− | <?php
| |
| class Especialidades extends ActiveRecord | | class Especialidades extends ActiveRecord |
| { | | { |
Línea 78: |
Línea 73: |
| </source> | | </source> |
| | | |
− | ==Ejemplo de Uso== | + | ==La Consulta== |
− | Suponiendo que necesitamos crear una lista de los profesionales guardados en la tabla profesionales con sus respectivas especialidades.
| + | La consulta seria en un controller...<br> |
− | | |
− | == Listar los Profesionales con su Especialidad ==
| |
− | | |
− | ===[ profesionales_controller.php ] ===
| |
− | | |
− | Tenemos que definir en el controlador el arreglo (variable $profesionales) que devuelve la operación en la base de datos.
| |
− | | |
− | <source lang=php>
| |
− | <?php
| |
− | | |
− | Load::models('profesionales');
| |
− | | |
− | class ProfesionalesController extends AppController {
| |
− | public function listar()
| |
− | {
| |
− | $profesional = new Profesionales();
| |
− | $this->profesionales = $profesional -> find(); //Obtenemos todos los profesionales
| |
− |
| |
− | }
| |
− | }
| |
− | ?>
| |
− | </source>
| |
− | | |
− | === Obteniendo las Relación de Profesionales ===
| |
− | 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 objeto está la relación porque así fue definida, Un Profesional tiene una Especialidad.
| |
− | | |
− | === Vista [ listar.phtml ] ===
| |
− | | |
− | <source lang=php>
| |
− | <?php View::content()?>
| |
− | <br><br>
| |
− | <div align="center">
| |
− | <h5>Lista de Profesionales</h5><br>
| |
− | <table border="1">
| |
− | <tr style="background-color: #c0c0c0;">
| |
− | <td>Profesional</td>
| |
− | <td>Especialidad</td>
| |
− | </tr>
| |
− | <?php foreach ($profesionales as $profesional) :?>
| |
− | <tr>
| |
− | <td><?php echo $profesional->apellido . ", " . $profesional->nombre ?></td>
| |
− | <td><?php echo $profesional->getEspecialidades()->nombre ?></td>
| |
− | </tr>
| |
− | <?php endforeach;?>
| |
− | </table>
| |
− | </div><br><br>
| |
− | </source>
| |
− | | |
− | === ¿Pero como se obtienen los datos de la Especialidad? ===
| |
| | | |
− | Pongamos nuestra atención en esta linea:
| |
| <source lang=php> | | <source lang=php> |
− | <td><?php echo $profesional->getEspecialidades()->nombre ?></td>
| + | $this->profesionales = $this->Profesionales->find(); |
| </source> | | </source> |
− | | + | <br> |
− | De esta forma KumbiaPHP nos hace la conexión entre las dos tablas, solo tenemos que especificar getNombreDelModelo()->campo;
| + | 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> |
− | | |
− | Si por ejemplo tuviéramos una relación adicional entre una tabla Facultades y la tabla Especialidades, podríamos obtener la facultad de cada profesional mediante:
| |
− | <source lang=php>
| |
− | <td><?php echo $profesional->getEspecialidades()->getFacultad()->nombreFacultad; ?></td>
| |
− | </source> | |
− | | |
− | | |
− | | |
− | | |
− | === Screenshot de la Vista ===
| |
− | [[Archivo:Vista1_relacion_1_N_KumbiaPHP.jpg|center|Lista de profesionales con su Especialidad]]
| |
− | | |
− | === Obteniendo las Relación de Especialidades ===
| |
− | | |
− | [[Categoría:Tutoriales KumbiaPHP]]
| |
− | Para obtener la relación de las Especialidades, se debe obtener la lista de especialidades y luego, por cada una de las especialidades, agrupar los profesionales que tienen esa especialidad.
| |
− | | |
− | === Controlador para listar Profesionales por Especialidad ===
| |
− | | |
− | ===[ profesionales_controller.php ] ===
| |
− | | |
− | Se deben realizar las siguientes modificaciones al controlador.
| |
− | | |
| <source lang=php> | | <source lang=php> |
− | <?php
| + | foreach ($profesionales as $profesional){ |
− | | + | echo $profesional->nombre; |
− | Load::models('especialidades');
| + | echo $profesional->Especialidades()->nombre; |
− | | |
− | class ProfesionalesController extends AppController {
| |
− | public function listar()
| |
− | {
| |
− | $especialidad = new Especialidades();
| |
− | $this->especialidades = $especialidad -> find(); //Obtenemos todas las especialidades
| |
− |
| |
− | }
| |
| } | | } |
− | ?>
| |
| </source> | | </source> |
− |
| |
− | === En la Vista correspondiente ===
| |
− | <source lang=php>
| |
− | <?php View::content()?>
| |
− | <div align="center">
| |
− | <h5>Lista de Profesionales por Especialidad</h5><br>
| |
− | <table border="1">
| |
− | <?php foreach ($especialidades as $especialidad) :?>
| |
− | <tr><td colspan="2">Especialidad : <h5><?php echo $especialidad->nombre ?></h5><br></td></tr>
| |
− | <tr style="background-color: #c0c0c0;">
| |
− | <td>Profesional</td>
| |
− | <td>Telefono</td>
| |
− | </tr>
| |
− | <tr>
| |
− | <?php foreach ($especialidad->getProfesionales() as $profesional) : ?>
| |
− | <td><?php echo $profesional->apellido .", ".$profesional->nombre ?></td>
| |
− | <td><?php echo $profesional->telefono1 ?></td>
| |
− | </tr>
| |
− | <?php endforeach; ?>
| |
− | <?php endforeach;?>
| |
− | </table>
| |
− | </div>
| |
− | </source>
| |
− |
| |
− | === Screenshot de la vista ===
| |
− | [[Archivo:Vista2_relacion_1_N_KumbiaPHP.jpg|center|Lista de Especialidades con los Profesionales asociado]]
| |
− |
| |
− |
| |
− | '''Realizado Por: Adrián Murúa (adolphm)'''
| |
− | '''Modificado Por: Juan Felipe (JF)'''
| |