Edición de «Como Crear Relacion 1:N KumbiaPHP Framework»

De KumbiaPHP Framework Wiki

Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.

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)'''
 

Ten en cuenta que todas las contribuciones a KumbiaPHP Framework Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Proyecto:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)

Plantilla usada en esta página: